程序来查找字符串的长度

时间:2017-02-05 09:07:34

标签: c c-strings

如果我输入大于10的字符串,那么为什么不生成编译时错误,因为我已声明大小为10的str?例如,我输入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);
}

4 个答案:

答案 0 :(得分:5)

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

此外,{C}中已将gets标记为已弃用并且只是从C11中删除,因为无法防止这种不安全的行为:没有人抱怨,您可以编写超出数组边界的内容,这是未定义的行为。请改用fgets,以提供更高级别的安全性。

答案 1 :(得分:1)

因为fgets不接受长度参数,所以它不知道输入缓冲区有多大。

您可以使用false代替

答案 2 :(得分:1)

未定义的行为。任何事情都可能发生。

永远不要使用gets(),因为它不会阻止缓冲区溢出,这正是您的程序正在执行的操作。使用fgets()代替gets()

fgets()可以防止超出该范围的数组大小。

fgets(array, sizeOfArray, stdin);

答案 3 :(得分:0)

因为您将字符串长度定义为10,所以如果值增加程序停止执行,此外您还没有为代码设置处理错误机制。因此导致您提到的以下错误。使用fgets