【发布时间】:2016-07-21 08:45:35
【问题描述】:
此代码返回 n=11,第 10 和第 11 个字符分别为 ' ' 和 '@' 这是如何运作的? strlen 函数如何将其视为 11 个字符?在某些编译器中,字符串长度似乎为 12 个字符。
#include <stdio.h>
#include <string.h>
void fun(char *arr)
{
int i;
unsigned int n = strlen(arr);
printf("n = %d\n", n);
for (i=0; i<n; i++)
printf("%c ", arr[i]);
}
int main()
{
char arr[] = {'g', 'e', 'e', 'k', 's', 'q', 'u', 'i', 'z'};
fun(arr);
return 0;
}
【问题讨论】:
-
未定义的行为 - 这里可能发生任何事情,包括段错误或未终止。
-
你碰巧在“geeksquiz”常量结束后的某个地方有一个 nul 字符。考虑到您将在只读数据段中拥有的其他值(没有想到),它可能有一些逻辑,但这绝对不是您应该依赖的东西。
-
"没有空字符的字符串" 不是字符串
标签: c string c-strings string-length strlen