gpt4 book ai didi

C变量 "forgets"接受输入后的值是多少

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

我写了我认为会很简单的代码,但它的行为不正常。

我的预期输出是:

I'm fine with printing it here 3 
Can be printed as much as I want 3
enter anything: d (I input anything here)
printing it again: 3
I'm fine with printing it here 3
...

这会无限循环,但这是我收到的:

I'm fine with printing it here 3 
Can be printed as much as I want 3
enter anything: d
printing it again:
I'm fine with printing it here
...

本质上,在接受完全不相关的输入后,它就好像忘记了 num 的值一样。这是我的代码:

#include <stdio.h>

int main() {
char num[1] = "3";
char entry;
while(1) {
printf("I'm fine with printing it here %s \n", num);
printf("Can be printed as much as I want %s \n", num);
printf("enter anything: ");
scanf("%s", &entry);
printf("printing it again:%s \n", num);
}
}

此外,当我删除 while 循环时,输出会变成乱码:

I'm fine with printing it here 3??U? 
Can be printed as much as I want 3??U?
enter anything: d
printing it again:

我是 C 的新手,我在这里做错了什么?

最佳答案

问题在于

 scanf("%s", &entry);

在那里,你总是越界。这会调用 undefined behavior .

具体来说,entry 可以包含一个(只有一个)char,但是 %s 期望它的参数是一个指向 的指针>char 数组,其中存储提供的输入以及空终止符。

现在,即使对于单个字符输入,您也需要一个包含两个 char 元素的数组来存储它,包括终止 null,因此即使对于尽可能小的输入,您也差一个。

就是说,您正面临 num类似问题,在初始化时,您没有空终止符的空间。你应该写

char num[2] = "3"

或者,为了更好,把它留给编译器

char num[ ] = "3"

能够将 num 用作字符串

关于C变量 "forgets"接受输入后的值是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42711364/

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