如果我输入大于10的字符串,那么为什么不生成编译时错误,因为我声明str了大小为10?例如,我有输入welcome to the world,然后它正在编译和运行没有错误.
#include <stdio.h>
#include <conio.h>
int main() {
int i = 0, length;
char str[10];
printf("enter string: ");
gets(str);
while (str[i] !='\0') {
i = i + 1;
}
length = i;
printf("the length of string is %d", length);
}
Run Code Online (Sandbox Code Playgroud)
输入字符串是运行时实体.涉及它的任何计算都无法在编译时执行,因此您可以做的最好的事情是引发运行时错误.
此外,gets在C99中被标记为已弃用并且仅从C11中删除,因为无法防止这种不安全的行为:没有人抱怨,您可以编写超出数组边界的内容,这是未定义的行为.fgets相反,使用它可以提供更高级别的安全性.