带有 scanf : nonrestricted char array doesn't give correct result 的字符数组

标签 c arrays string

下面是一个询问用户的程序 输入一个名字,然后打印出名字的一个字母 一次,最终生成整个名称。 我有两个版本的程序。下面那个 做了一件奇怪的事:如果我输入类似 jkljljkliunionnklsaa ,它只会产生jkljljkl

但是如果我限制 char name[40],然后输入相同的 name,程序会显示完整的名称。 我在不允许它生成全名的程序中做错了什么?

    #include <stdio.h>
    #include <string.h>

    int main (void)
    {
        int i, s;
        char name[s];

        printf ("Type a name:  ");
        scanf ("%s", name);

        for ( i = 0; i < strlen(name); i++)
        {
            printf ("%c", name[i]); // print the i-th character of name
        }
        printf("\n");
     }

最佳答案

 int i, s;
 char name[s];

这是未定义的行为(在 ISO C 术语中;任何事情 都可能发生,甚至是您可能预料到的事情),因为 s 未初始化.与您的问题的措辞不同,作为数组大小的未初始化变量意味着不受限制的大小。这意味着程序错误。 :-)

s 可能恰好是 0 或 10 或 -136186732,因此您可能有也可能没有足够大的字符数组来存储一些字符。

它将再次开始工作

 int i, s = 40;

澄清一下,C 有自动增长或自适应数组。如果您需要在运行时分配数组或调整数组大小,则需要使用 malloc()realloc()

关于带有 scanf : nonrestricted char array doesn't give correct result 的字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32229471/

相关文章:

C++ plus 运算符不适用于 const char 和其他运算符

python - 获取十进制值

c -/proc/self/maps 输出中的堆段

c - 使用 openssl 从 x509 字符数组中提取 RSA 公钥

带数组指针的 C 函数

javascript - Mootools 中 for (var x in data) 循环发生了什么

java - 用单个数字排列的简单数字

javascript - 在数组中循环数组

c : How to initialize mulitdimensional arrays from other arrays?

Python (2.7.13) - 我有一个看起来像数组的字符串