增加C-string中的Null字符和strlen()在C-string索引中的使用



如果我们想要将空字符''增加60,给定字符串大小事先已知,那么我们可以做以下操作:

#include <stdio.h>
int main() {
char str1[] = "Hello!"; 
str1[6] += 60;
printf("%sn", str1);
return 0;
}
我们得到的输出是:
Hello!<

但是,如果我们不知道字符串的大小,那么我们可以这样使用strlen:

#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "Hello!"; 
str1[strlen(str1) + 1] += 60;
printf("%sn", str1);
return 0;
}

但是,这输出:

Hello!
如您所见,它根本没有改变它。在第二种情况下我做错了什么?此外,我认为数组大小是静态的,不会改变大小,所以它怎么可能在第二种情况下,我们已经'添加';性格。

str1[strlen(str1) + 1]是空终止符之后的字符。改成str1[strlen(str1)]

想想看。strlen("")0

还要记住,C从0开始索引数组,因此字符串str中的最后一个字符位于str[strlen(str) - 1]

但是,请记住,在更改了空结束符的地方打印字符串并不是一个好主意。这将在打印它们时导致未定义的行为,因此严格地说,您无法真正从输出中得出结论。在这种情况下,我上面所说的是一个非常非常可能的解释。但是如果调用UB,程序将变得不可预测。

数组索引从zero开始,所以应该是:

str1[strlen(str1)] += 60;

但是您还需要添加空字符。

str1[strlen(str1) + 1] = 0;

但是记住str1数组必须有足够的空间。你不能访问超出其边界的数组。

所以它不能像你的例子那样定义。它必须有(至少)8个元素:

char str1[8] = "Hello!"; 

相关内容

最新更新