gpt4 book ai didi

c - 使用 %lu 打印 int 类型 - C+XINU

转载 作者:太空宇宙 更新时间:2023-11-04 01:37:24 24 4
gpt4 key购买 nike

我有一个给定的代码,在我看来该代码有问题:我在XINU下编译。

下一个变量是相关的:

unsigned long ularray[];
int num;
char str[100];

有一个函数返回int:

int func(int i)
{
return ularray[i];
}

现在代码是这样的:

num = func(i);
sprintf(str, "number = %lu\n", num);
printf(str);

问题是我在使用 %lu 打印时得到了很大的数字,这是不正确的。

如果我将 %lu 更改为 %d,我会得到正确的数字。例如:使用 %lu 我得到 27654342,而使用 %d 我得到 26,后者是正确的;

变量给定,函数声明给定,我写函数体,但必须返回int;

我的问题是:

  1. 我不熟悉“sprintf”,也许问题出在这里?

  2. 我将 unsigned long 分配给 int,然后用 %lu 打印 int,对吗?

  3. 我该如何解决这个问题?

提前致谢。

谢谢大家的回答。我只是想提一下我在 XINU 下工作,好吧,我改变了文件编译的顺序以及你所知道的......它的工作并在 %lu 和 %d 上显示相同的数字。

我很清楚将“unsigned long”分配给 int 然后用 %lu 打印是不正确的编码,可能会导致数据丢失。但正如我所说,代码已给出,我无法更改变量和打印命令。

顺便说一句,我没有错误或警告。我不知道为什么更改编译顺序可以解决问题,如果有人有想法,欢迎您分享。

我要感谢所有试图帮助我的人。

最佳答案

I assigned unsigned long to int and then print the int with %lu, is That correct?

不,这根本不正确。稍微考虑一下! Printf 尝试访问由您传入的变量表示的内存,在您的情况下,unsigned long 表示的位数比 int 多,因此当 printf 被告知打印 unsigned int 时,它会读取实际的 int 并读取一些其他可能是垃圾的内存,因此是随机数。如果 printf 有一个原型(prototype)恰好提到了 unsigned long,编译器可以执行隐式转换并用零填充其余不需要的内存,但由于情况并非如此,您必须执行以下任一解决方案:

一,显式转换你的变量:

printf("%lu", (unsigned long)i);

二、使用正确的格式说明符:

printf("%d", i);

此外,将 unsigned long 分配给 int 也存在问题 - 如果 long 包含的数字太大,则它不适合 int 并被截断。

关于c - 使用 %lu 打印 int 类型 - C+XINU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12120062/

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