我有以下代码。
#include <stdio.h>
#include <string.h>
#define MAXLINE 1000
int main()
{
int i;
char s[MAXLINE];
for (i = 0; i < 20; ++i) {
s[i] = i + 'A';
printf("%c", s[i]);
}
printf("\nstrlen = %d\n", strlen(s)); // strlen(s): 20
return 0;
}
我应该写吗
s[i] = '\0';
在循环执行后显式标记字符串的结尾还是自动完成?没有
s[i] = '\0';
函数 strlen(s) 返回正确的值 20。
最佳答案
是的,您需要自己添加一个空终止符。一个不是自动添加的。
您可以通过将 s
显式初始化为在字节 20 处不包含 NUL 的内容来验证这一点。
char s[MAXLINE] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
如果你这样做
strlen(s)
不会返回 20。
关于c - 字符串末尾的空字符 '\0',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59553322/