gpt4 book ai didi

c - 在 C 中,读取字符和整数时变量值发生变化

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

我正在学习 C,我有一个关于我遇到的小问题的问题。请耐心等待,为了简洁起见,我不会只编写一个完整的程序片段。

当编写一个程序要求一个字符和一个整数(创建一个具有所述字符和整数维度的三角形)时,我遇到了一个问题,一旦我提示输入字符,一个完全不同的变量的值( int x;) 已更改为 0。我解决了问题并让程序运行,但我不完全理解为什么会这样。

例如:

char sym[1];    
int x;
printf("number:/n"); //asking for integer
scanf("%d", &x); //reading and assigning x to the value
printf("symbol:/n"); //asking for the character
scanf("%s", &sym); //reading and assign sym to the character
printf("%d",x); //printing the integer
printf("%s",sym); //printing the character

无论读入什么内容,x 的输出都会变为 0。这仅在读取字符后发生。

当我将 char sym[1] 更改为 char sym[8] 左右时,它不会更改 x 的值.

我知道这一定是一些内存分配问题,但是有人知道为什么会发生这种情况的细节吗?我知道更改 sym 的数组大小会有所不同,但为什么会更改变量 x 的值?

最佳答案

您应该使用 %c 而不是 %s 来读取单个字符。 %s 说明符读取字符串,它们是以null 结尾的字符数组。由于 sym vector 只有一个字符的空间,空终止符(零)写在 sym 之后一个字节,恰好在 x

1.可能的初始内存布局:(每对数字是一个字节。)

 00 00 00 00 00
-- -----------
sym[0] x

2.在 scanf("%d", &x); 读取“7”之后:

 00 07 00 00 00
-- -----------
sym[0] x

3A.如果 scanf("%s", &sym); 读取“A”:(65是A的ASCII码)

 65 00 00 00 00
-- -----------
sym[0] x

3B.如果 scanf("%s", &sym); 读取“AAA”:

 65 65 65 00 00
-- -----------
sym[0] x'

代码中的另一个问题是当扫描字符串时,您不应该使用&,因为sym 已经是您想要的地址保存到。

关于c - 在 C 中,读取字符和整数时变量值发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26086896/

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