带有scanf的char数组:nonrestricted char数组没有给出正确的结果

时间:2015-08-26 14:30:52

标签: c arrays string

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

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

    #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");
     }

1 个答案:

答案 0 :(得分:0)

在第一个版本中,您没有指定字符数组的大小,而是将其保留为name[s],其中s是使用垃圾值初始化的整数。

然而,在第二种情况下,您将其设为name[40],其中技术上说可以容纳 39个字符长字符串。 (39.想想为什么???