我有下面的代码。
#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';
还是自动完成的呢? 如果没有使用s[i] = '\0';
函数,则strlen(s)将返回正确值20。
strlen
函数需要一个以空字符'\0'结尾的字符串作为参数。如果你没有提供一个正确的以空字符结尾的字符串,那么会导致未定义行为。如果你上面的代码“能够运行”,那只是偶然而非有意为之。不要碰运气地编程。 - WhozCraigstrlen
之前并且循环结束时,要执行s[i+1]='\0'
或者甚至在循环之前就使用memset(s,'\0',sizeof(s))
。否则strlen
等函数将无法正常工作。 - Gauravs[i] = '\0'
是最简单的,并且只需要写入一个字节。 - Weather Vanestrlen
返回size_t
之外,你必须使用%zu
打印结果。 - phuclv