gpt4 book ai didi

C printf 带有 %lu 的整数产生大数

转载 作者:行者123 更新时间:2023-11-30 15:17:16 29 4
gpt4 key购买 nike

我知道用 %lu 打印一个无符号长整数是不好的做法。在我正在从事的一个项目中,当我尝试以 snprint 格式用 %lu 打印 11 时,我得到了一个很大的数字。(旧代码)我使用的是 gcc 4.9.3。

我认为下面的代码会产生错误的数字,因为 snprintf 被告知要读取超过所占用的 4 个字节。但事实并非如此。工作完美。它可以正确读取所有内容。要么它没有超过未知的 4 个字节,要么当它从 int 提升为 long 时,long 中的额外 4 个字节完全为零。

出于好奇,我想知道 printf 何时打印错误的数字?需要什么条件才能产生错误的大数?上面 4 个字节肯定有垃圾,但它似乎没有为我设置垃圾。

我在这里阅读了答案,但代码对我有用。我知道它是一个不同的编译器。

Printing int type with %lu - C+XINU

  #include<inttypes.h>
#include<stdio.h>
int main(void){
uint32_t number1 = 11;
char sentence[40];
snprintf(sentence,40,"Small number :%lu , Big number:%lu \n",number1,285212672);
printf(sentence);
}

最佳答案

在 OP 的机器上,uint32_tunsigned longint 看起来大小相同 @R Sahu 。 OP 的代码不可移植,可能在另一台机器上产生不正确的输出。

when does printf print the wrong number?

使用匹配的printf()说明符来实现真正可移植的代码。使用不匹配的说明符可能打印错误的数字。

输出字符串可能超过 40 个字符。最好使用足够大或大小合适的缓冲区。

#include <inttypes.h>
#include <stdio.h>

int main(void){
uint32_t number1 = 11;
// char sentence[40];
char sentence[80];
snprintf(sentence, sizeof sentence,
"Small number :%" PRIu32 " , Big number:%d \n",
number1, 285212672);
// printf(sentence); // Best not to print a string using the printf() format parameter
fputs(sentence, stdout);
}

关于C printf 带有 %lu 的整数产生大数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32574554/

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