Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C程序Printf函数显示无符号长类型的异常行为? 请考虑下面的程序并观察输出。 #include <stdio.h> int main() { unsigned long long val ; val =144111444250; printf ("%llu\n", val); printf ("%u %llu\n",val, val); return 0; }_C_Unix_Printf_Solaris - Fatal编程技术网

C程序Printf函数显示无符号长类型的异常行为? 请考虑下面的程序并观察输出。 #include <stdio.h> int main() { unsigned long long val ; val =144111444250; printf ("%llu\n", val); printf ("%u %llu\n",val, val); return 0; }

C程序Printf函数显示无符号长类型的异常行为? 请考虑下面的程序并观察输出。 #include <stdio.h> int main() { unsigned long long val ; val =144111444250; printf ("%llu\n", val); printf ("%u %llu\n",val, val); return 0; },c,unix,printf,solaris,C,Unix,Printf,Solaris,在第一个printf中使用%llu会给出正确的结果,但在第二个printf中使用%llu会给出错误的结果 这是未定义的行为:printf要求%u使用无符号int,但您提供了无符号long long int,之后发生的任何事情都取决于编译器的奇想 printf和scanf的格式说明符不仅指示应如何打印/扫描某些内容,还指示应使用何种类型的参数。如果你撒谎,你就不能期望结果是合理的。你的编译器应该警告你不要将%u与长无符号类型一起使用。%u只从堆栈中弹出val的一部分。之后,%llu弹出sizeof

在第一个printf中使用%llu会给出正确的结果,但在第二个printf中使用%llu会给出错误的结果

这是未定义的行为:
printf
要求
%u
使用
无符号int
,但您提供了
无符号long long int
,之后发生的任何事情都取决于编译器的奇想


printf
scanf
的格式说明符不仅指示应如何打印/扫描某些内容,还指示应使用何种类型的参数。如果你撒谎,你就不能期望结果是合理的。

你的编译器应该警告你不要将
%u
长无符号类型一起使用。
%u
只从堆栈中弹出
val
的一部分。之后,
%llu
弹出
sizeof(unsigned long-long)
字节,其中包括第一次尝试打印
val
的剩余部分。用
%llu
替换
%u
时,您的程序应该可以正常工作。您使用了无效的说明符,结果无效。谁会感到惊讶?@BoPersson:在第一个printf中使用%llu会给出正确的结果,但在第二个printf中使用%llu会给出错误的结果。这就是我的问题所在about@SHAAN-但第一种格式
%u
是错误的。正如答案所说的那样——一旦有什么地方出了问题,其他地方也可能出问题。
   144111444250

   33 10211385600662044705