以下程式應該讀取特定的文本檔案并逐行列印其內容。但是,它會導致無限回圈。為什么?
#define __STDC_WANT_LIB_EXT2__ 1
#include <stdio.h>
int main(void)
{
char *line = NULL;
size_t buf_len;
size_t line_len;
FILE *fp = fopen("README.txt", "r");
while (1) {
line_len = getline(&line, &buf_len, fp);
if (line_len < 0)
break;
printf("%s", line);
}
return 0;
}
我注意到我可以通過更改line_len < 0為來解決問題line_len == -1,但我不明白這解決問題的原因。不-1小于0嗎?
(C 編譯器:Ubuntu 20.04 上的 gcc 9.4.0)。
uj5u.com熱心網友回復:
line_len是size_t應該鏈接到一個無符號長的型別,因為它是一個無符號值,它永遠不會低于 0,而是環繞到可能的最大值。
這可能是因為-1沒有任何型別的型別注釋:
unsigned long test1 = 18446744073709551615;
long test2 = -1;
printf("%d\n", test1 == test2);
回傳true,因為位值相同。
C 會做一些型別轉換(例如10.0f == 10),但是如果值是行內的,它就無法知道你需要它是什么型別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/468826.html
