2011-08-31 55 views
0

我正在將數據收集到char [] []數組中,然後讓用戶選擇將哪些字符串寫入文件。所以我在做例如如何從char [] []寫入文件?

char arr[3][3]; // assume there are three different two-char long strings in there 
FILE* f = fopen("file", "w"); 
fputs(arr[1], f); 
fclose(f); 

現在的問題是,我得到一個段錯誤的fputs()電話,我不知道爲什麼。

任何想法?

+2

你是否檢查過'fopen'返回的文件指針以確保它不是NULL?假設'arr'包含3個雙字符長字符串,那我唯一能想到的就是'fputs'到barf。 –

+0

@John Bode請把它放在答案中,以便我可以接受它。我根本沒有想到在文件上丟失的權限。 –

回答

2

確保通過fopen返回的文件指針不爲NULL;假設arr包含有效的以0結尾的字符串,這是我唯一能想到的其他事情,會導致fputs barf。

0

arr指的是什麼?我想這個問題是由於arr未被初始化。

+1

'arr'不指向任何東西,它是一個數組。但是你是對的,在示例代碼中它沒有被初始化。 –

+0

請仔細閱讀完整的代碼,我寫道假設裏面有東西。 –

0

arr[1]指向的char數組可能不是以null結尾的。您應該聲明arrchar arr[3][4];並用'\0'(空)字符填充最後一列。

1
  1. fputs預計\0 - 終止的字符串。確保在您提供的字符串末尾添加0。或者使用fwrite

  2. 檢查f != NULLfopen

+0

好的,對不起,我的字符串是零終止的。我不認爲這很重要。 –

+0

@Cobra_Fast:我仍然建議使用'fwrite',這比在這種情況下的fput好。你能告訴我如何填補陣列? – Drakosha

+1

NULL終止字符串? '\ 0'終止字符串! – user411313

0

也許你應該檢查文件指針返回的值!

+0

奧普茲對不起,我得到了他的問題錯了我後來理解得很好我很奇怪他想要一個性格抱歉的錯誤答案!以及如果我的回答完全錯誤? – niko

+0

好吧即時改變我的代碼我不知道你可以用這種方式使用2維數組,所以我認爲它可能是錯的 – niko