我知道下面的代碼被打破內返回值關於存儲的getchar()的燒焦變
#include <stdio.h>
int
main(int argc, char* argv[])
{
char single_byte = getchar();
while (single_byte != EOF) {
single_byte = getchar();
printf("getchar() != EOF is %d.\n", single_byte != EOF);
if (single_byte == EOF)
printf("EOF is implemented in terms of 0x%x.\n", single_byte);
}
return 0;
}
雖然我預料的典型輸出它(使用/dev/urandom
作爲輸入流爲例)將是最後EOF is implemented in terms of 0xff
,而不是的以下
$ ./silly < /dev/urandom
getchar() != EOF is 1.
getchar() != EOF is 1.
// ...
getchar() != EOF is 0
EOF is implemented in terms of 0xffffffff.
此外,0xffffffff
不能存儲到一個單一的字節...
預先感謝您
當然,但畢竟我只是打印'char'的'single_byte'的值。我問:如何'single_byte'(它確實是** 1 **字節)可以是'0xffffffff'? – giuscri
你試過打印EOF嗎? http://ideone.com/wHcIq8 - 您需要了解的是EOF在您的系統中評估的內容。你會得到你的答案。 – Sadique
因爲我打印'single_byte',導致我的困惑?意思是'%x'打印'-1'不管它來自哪裏,但是在'1'上使用2的補碼被認爲是一個32位的字?對嗎?首先評估'single_byte',然後打印出指令詢問的方式。 – giuscri