2012-04-18 100 views
0

我正在製作一個購物清單程序,我想包含一個用戶輸入字符串,該字符串將其放入文本文件的下一個可用行中。現在,這會將字符串添加到文件中,但是隨後會爲一些空格放入隨機字符,然後,如果我輸入其他字符,它將不會在下一行中。將字符串添加到C中的文本文件

void AddToFile(FILE *a) { 
    char addItem[20]; 
    printf("Enter item: "); 
    scanf("%s", &addItem); 
    fwrite(addItem, sizeof(addItem), 1, a); 
} 
+0

對其他問題也這樣做。 – Jack 2012-04-18 13:04:04

回答

6

此行應該是:

// strlen instead of sizeof 
    fwrite(addItem, strlen(addItem), sizeof(char), a); 

你的代碼總是寫的,而不是字符串已經字符的實數20個字符。

3

除了pivotnig所述的更正之外,fwrite()不會爲該文件寫入新的行字符。請在fwrite()之後寫入新行,或在fwrite()之前將其追加到addItem緩衝區。

你應該避免通過限制複製到buf字符數緩衝區溢出:

scanf("%19s", addItem); 
1

在當前的例子,如果你會嘗試寫超過20個字符的項目,你會惹上麻煩的scanf將覆蓋未分配的內存。一個稍微改進的版本將是:

scanf("%19s",&addItem); 

這樣,至少你不會覆蓋隨機存儲器。

編輯:感謝傑克指出\ 0也必須寫。

+1

您必須在'addItem'中爲0結束符'\ 0'保留一個空格。 – Jack 2012-04-18 13:02:07

相關問題