gpt4 book ai didi

c - 为什么输出文件损坏/充满垃圾? (期待数字)

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

以下代码行将无符号整数值写入文件,但文件内容不可读。

struct rabin_polynomial
{
uint64_t start;
uint16_t length;
struct rabin_polynomial *next_polynomial;
};

fprintf(out_file, "%llu,%u",poly->start,poly->length);

如果我将代码的输出显示在命令行屏幕上,它是可读的。

文件“out_file”未以二进制模式打开。

这里是输出文件的部分内容:

 -ÍÍÍÍÍÍp\y";^æó r\ ÍÍÍÍ-       ÍÍÍÍÍÍ
Ø∿»Iðr\ ÍÍÍÍ- wÍÍÍÍÍÍ7OT-OØÚ‚\ ÍÍÍͤ* L ÍÍÍÍÍÍî›ùçÉç`‚\ ÍÍÍÍð3 ÍÍÍÍÍÍ
Ø∿»I°‚\ ÍÍÍÍðC ÍÍÍÍÍÍíK¬è‹Ç{ ƒ\ ÍÍÍÍðS • ÍÍÍÍÍÍ-Ló3lJ–ÞPƒ\ ÍÍÍÍ…]

这是预期的输出:

0,2861 
2861,4096
6957,3959
10916,2380
13296,4096
17392,4096

最佳答案

如果您没有获得预期的文本值,可能是因为您使用了不正确的格式说明符(我假设您已经填充 em> 你试图在这里打印的变量,虽然你可能想要确认这一点)。

%llu 明确用于 unsigned long long int,其宽度不一定与 uint64_t 相同。

在 C99 中,inttypes.h 具有用于精确宽度和 -at-least-as-wide-as 数据类型的格式说明符的宏。

例如:

uint64_t xyzzy = 42;
printf ("Number is: %" PRIu64 "\n", xyzzy);

在这种情况下,PRIu64 表示 printf 格式说明符,无符号十进制输出,用于 ​​64 位精确宽度变量。对于不同的输出类型,还有各种各样的其他输出类型,还有 scanf 系列的等价物(从 SCN 开始)。

C99 的 7.8.1 格式说明符宏 部分详细列出了它们。


根据你的更新,你没有得到不正确的数字,而是得到了只能被描述为垃圾的东西,我想说你的问题出在其他地方。即使有损坏的指针或数据,我也不希望 fprintf 为数字格式字符串生成非数字数据。这肯定可能,因为它是未定义的行为,但可能性很小。

可以得到那种字符串输出,但这里不是这种情况。

换句话说,我认为您必须在代码的其他地方查找(例如)内存损坏问题。

要测试问题是否出在您认为存在的行中,您可以做的一件事是将其更改为:

printf("DEBUG: %llu,%u\n",poly->start,poly->length);
fprintf(out_file, "%llu,%u",poly->start,poly->length);

然后看看终端上出现了什么。

关于c - 为什么输出文件损坏/充满垃圾? (期待数字),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8698840/

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