此代码返回 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;
}
根据标准,由于您的“字符串”没有空终止符,因此这不是字符串。呼唤strlen
除字符串之外的任何内容都是未定义的行为,因此任何事情都可能发生,包括您正在观察的情况。
如果您想知道这是如何发生的,这可能是因为strlen
不断尝试找到空终止符,偶尔会在内存中的某个位置找到它arr
.
请注意,如果无法“足够快”地找到空终止符,则此代码甚至可能出现段错误。
您可以使用类似的工具valgrind检测此类内存访问违规。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)