程序来查找字符串的长度

Bha*_*mar 0 c c-strings

如果我输入大于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)

cad*_*luk 5

输入字符串是运行时实体.涉及它的任何计算都无法在编译时执行,因此您可以做的最好的事情是引发运行时错误.

此外,gets在C99中被标记为已弃用并且仅从C11中删除,因为无法防止这种不安全的行为:没有人抱怨,您可以编写超出数组边界的内容,这是未定义的行为.fgets相反,使用它可以提供更高级别的安全性.