gpt4 book ai didi

C - 将字符串输入到 int 变量中?

转载 作者:行者123 更新时间:2023-11-30 18:26:22 25 4
gpt4 key购买 nike

在下面的代码中,

#include <stdio.h>
int main()
{
int i = 5;
scanf("%s", &i);
printf("%d\n", i);
return 0;
}

我获取存储在i地址处的输入字符串。当我尝试打印变量 i 时,我得到了一些数字。

输入示例:

hello

输出:

1819043176

这是什么数字,到底发生了什么?

最佳答案

该程序将从用户读取的字符串写入变量 i 占用的内存中并写入它。由于这是未定义的行为,所以任何事情都可能发生。

实际发生的情况是,在您的机器上,int 的大小是 4 个 char,以及字符“hell”,当转换为 ASCII 并解释为CPU 字节顺序中的数字,结果是数字 1819043176。字符串的其余部分,字母 o 和终止 nul 字符,超出了计算机上 i 存储位置的末尾。那么 scanf 的作用是:

  h  e  l  l  o \0
|68 65 6c 6c|6f 00 ...
| i|memory past i

您似乎在小端机器上运行它,因此当字节 68 65 6c 6c 存储到 int 中时,它会被解释为数字 0x6c6c6568 ,或十进制的 1819043176

如果 int 的大小不同,或者机器使用其他字符集(例如 EBCDIC 而不是 ASCII),或者 CPU 使用大端字节顺序,或者程序以在内存写入受到限制检查的环境中,您会得到不同的结果或程序崩溃。简而言之,未定义的行为。

关于C - 将字符串输入到 int 变量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17770492/

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