【发布时间】:2022-01-23 04:49:35
【问题描述】:
int main ()
{
/*
char a[] = "abc";
printf("strlen(a): %li", strlen(a));
printf("\nsizeof(a): %li", sizeof(a));
*/
char b[3];
printf("\nstrlen(b): %li", strlen(b));
printf("\nsizeof(b): %li", sizeof(b));
printf("\nb = ");
puts(b);
return 0;
}
当我运行上面的代码时,它会输出以下内容:
strlen(b): 1
sizeof(b): 3
b =
但如果我撤消评论,它会输出:
strlen(a): 3
sizeof(a): 4
strlen(b): 6
sizeof(b): 3
b = ����abc
为什么会发生这种情况?我希望能对它进行深入的解释,如果可能的话,可以快速“修复”它,这样我就不会再遇到这个问题了。
总的来说,我是编程和 C 的初学者,根据我到目前为止所学的知识,这不应该发生
感谢和抱歉,如果我违反了本网站的任何规则,我也是新来的!
【问题讨论】:
-
程序有未定义的行为,因为数组 b 未初始化。
-
由于
b不包含字符串,因此不允许将其传递给strlen。也不允许将其传递给puts。您必须将字符串传递给这些函数。