【发布时间】:2020-05-07 15:52:01
【问题描述】:
(1)
#include<stdio.h>
int main()
{
char str[5]="hello";
str[5] = "g";
printf("%s",str);
return 0;
}
输出:你好0
这不应该给出错误吗?
(2)
#include<stdio.h>
int main()
{
char str[5]="hello";
str[3] = "g";
printf("%s",str);
return 0;
}
输出:hel0o
0是从哪里进来的?
编译器:TDM-GCC-64
视窗 10
编辑器:Sublime Text
【问题讨论】:
-
C 不检查数组边界。你必须自己处理。
-
如果您的编译器没有抱怨,请将警告级别调高(最大)。除了越界访问之外,类型不匹配
-
char str[5]="hello";没有字符串终止符,因此将它传递给期望一个字符串的函数是未定义的行为。 C 没有必须出错,就像你不会不看就被碾过马路。