這裏
c = getc(file) != EOF
你assignig比較的結果
getc(file) != EOF
到c
,這就像如果你這樣做
c = (getc(file) != EOF)
所以你應該增加,因爲operator precedence括號,所以校正代碼
while ((c = getc(ptr)) != EOF && c != '\n')
你也應該確保你不會寫過去char *buffer
傳遞給函數,所以傳遞它的大小,並迭代,直到找到'\n'
或直到沒有更多空間。
我建議
int getLine(FILE* file, char* buffer, size_t size)
{
int c;
size_t count;
if (buffer == NULL)
return 0;
while ((size < count - 1) && ((c = getc(file)) != EOF) && (c != '\n'))
{
*buffer++ = (char)c;
count++;
}
*buffer = '\0';
return 1;
}
你必須通過一個預先分配的緩衝區,並且它的大小,以防止出現嘗試添加字符過去的緩衝區的末尾。
你恨括號? :)(while((c = getc(ptr))!= EOF)&&(c!='\ n 「))'。你怎麼知道'緩衝區'符合字符? –
我不認爲有必要在每個表達式周圍編寫括號。 (c = getc(ptr)!= EOF)''將'0/1'賦給'c'並返回等價的布爾值,而'(c = getc(ptr) )!= EOF'根據從'getc'到'c'讀取的內容返回'true/false'。 –
由於運算符的優先級,編寫'(c = getc(ptr))!= EOF'更重要。 –