为什么结果为 0
Why the result is 0?
请参阅以下代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
char a[1000];
int i;
for(i = 1;i<1000;i++)
{
a[i] = 5;
}
printf("%dn",strlen(a));
return 0;
}
结果是 0 ,为什么?任何解释将不胜感激。
您永远不会分配或初始化a[0]
。在这种情况下,它恰好是' '
,所以strlen(a)
返回 0。
值得注意的是,在此处调用strlen
a
是未定义的行为,因为您间接尝试读取未初始化的垃圾内存,该内存a[0]
为搜索查找空终止符的第一步。即使明确地将其设置为 0,仍然会导致它在数组末尾运行的问题,直到它找到 0、崩溃或爆炸。
strlen() 从 0 开始计数,而不是 1。这样做,您将:
for(i = 0;i<1000;i++)
#include<stdio.h>
#include<stdlib.h>
int main()
{
char a[1000];
int i;
for(i = 0;i<1000;i++)//starts with 0 not 1
a[i] = 5;
a[i] = ' ';//NULL terminator shall be there
printf("%dn",strlen(a));//1000
return 0;
}
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 为什么在逗号分隔符上下文中将预增量的结果强制转换为void
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 为什么这个程序的结果是3 "born"?和 4 死
- 为什么在递归中使用循环会产生意想不到的结果?
- 为什么我的程序在 O0 和 O2 的优化级别返回不同的结果
- 为什么第二个代码给出了预期的结果,而第一个代码却没有?
- 为什么组合的上限和下限比较的计算结果总是为 true?
- 为什么这两段使用 constexpr、__PRETTY_FUNCTION__ 和 char * 的代码有不同的结果?
- C++向量与 C# 列表.为什么它们会产生不同的结果?
- 为什么'typeid(x) == typeid(y)'的计算结果为 true,其中 'x' 和 'y' 分别是 T 和 T& 类型的 id-表达式?
- 为什么函数 tellg() 没有返回好的结果?
- 双摆返回楠结果.为什么?
- 相机校准结果:为什么与输入相似
- 按回车键后,程序没有输出任何结果.为什么会这样
- 两个明显相似的函数给出了不同的结果.为什么
- 顺序和并行版本给出不同的结果 - 为什么
- 按位运算的意外结果 为什么 (1 | 1 & 2) 给出 1 而不是 2?