作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
此代码返回 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 的工具检测此类内存访问违规。
关于c - 如何为没有空字符的字符串计算 strlen?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38499311/
我是一名优秀的程序员,十分优秀!