gpt4 book ai didi

c - scanf 裁剪数字的最后一个字节

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

看看这个程序:

#include <stdio.h>

int main()
{
unsigned i = 0;
char type = 'a';
int result = scanf("%u%[asd]", &i, &type);
printf("result = %d, i = %u\n", result, i);

return 0;
}

它应该接受一个数字,然后是一个字符,即asd。当它得到第二个数字不匹配的输入时,该数字被正确解析,返回值为 1。如果输入在数字后面包含正确的字符,则返回值为 2 和 type解析正确。但是,该数字的最后一个字节被裁剪(如果我输入小于 256 的任何值,我会得到 0,但如果我输入 258 或 510,我仍然会得到 256)。为什么是这样?我做错了什么?

最佳答案

如果您读过例如this scanf reference ,您将看到 "%[" 格式用于读取字符串,其中当然包括写入字符串终止符。

由于您只提供一个字符来存储读取的字符串,因此 scanf 函数将总是写入越界,并且您有 undefined behavior .

发生的情况是字符串终止符被写入变量i的部分存储空间。

关于c - scanf 裁剪数字的最后一个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28926608/

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