gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 02:40:40 25 4
gpt4 key购买 nike

下面是一个询问用户的程序输入一个名字,然后打印出名字的一个字母一次,最终生成整个名称。我有两个版本的程序。下面那个做了一件奇怪的事:如果我输入类似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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com