为c++编写自己的切片函数,但得到的一些切片值很荒谬,

cdmah0mi  于 2022-12-02  发布在  其他
关注(0)|答案(1)|浏览(141)

我正在尝试创建自己的切片函数,但是对于像(0,15)这样的值,它会在末尾打印出荒谬的值。对于其他输入,它工作正常。下面是我的代码:

#include<stdio.h>

void slice(int a, int b, char *str) {
    char new[b - a];

    for (int i = 0; i < b - a; i++) {
        new[i] = str[a + i];
    }

    puts(new);
}

int main() {
    char str[] = { "My name is Ayush Anand" };
    slice(0, 15, str);
    
    return 0;
}

你怎么了?

z31licg0

z31licg01#

应该有多余的空间给一个空终止符。所以,在第(b - a)个索引处,加一个。

for (int i = 0; i < b - a; i++)
    new[i] = str[a + i];

new[b - a] = 0; // Null-terminator

正如其中一个注解中提到的,a > b是无效的,因此,在声明新字符串之前添加一个条件。

if (a > b) {
    fprintf(stderr, "a > b error");
    return;
}
char new[b - a];
...

相关问题