2016-03-16 74 views
-1

當我嘗試打印文件的每個字符時,我得到分段錯誤。我不明白爲什麼。我不明白我是如何得到分段錯誤

void parseStringAndDelete(char *file) 
{ 
// I a passing "drwxr-xr-x 1 ftp ftp    0 Mar 07 12:34 A_Folder" 
// as an argument for the function 
int i = 0; 
int k = 0; 
int len = strlen(file); 
int startIndex = 0; 

//printf("%s\n", file); 
//printf("%d\n", len); 
if(file[0] == 'd') 
    { 
     for(i = 0; i<len; i++) 
     { 
     printf("%s\n", file[i]); 
     } 
    } 

} 
+0

我發現的錯誤。對於printf(「%c \ n」,文件[i])而非printf(「%s \ n」,文件[i])。我相信因爲我不僅僅是一個字符串而是逐個字符地打印字符。 –

+1

啓用編譯器警告並觀察它們。 –

+0

正確:%s用於打印字符串,%c用於打印字符。你應該首先學會使用調試器,所以至少你會發現崩潰的線路,而不僅僅是「我得到分段故障」。其次,無論什麼時候遇到問題,都需要通過說:「我在某個地方犯了一個錯誤,我犯了什麼錯誤?」不要想:「我的代碼是正確的,爲什麼它不起作用」。總是想:「我的代碼錯了,它在哪裏錯了?」 – gnasher729

回答

2

如果你要打印字符串的每一個字符,那麼你應該使用%c,而不是%s

printf("%c\n", file[i]); 

此外,

打印時使用printf("%s", ..)一個字符串,你需要通過在字符串居住的地址,而不是地址的內容。

因此,對於char* str = "hello",print語句將

printf("%s\n", str); 

和NOT

printf("%s\n", str[0]); 
+2

我認爲OP希望'printf(「%c \ n」,file [i]);' –

+0

謝謝,這很有道理。我在printf中將切換%s的問題修復爲%c –

相關問題