2015-04-07 78 views
0

我嘗試在字符串數組中將'a'字符更改爲'e'。但我收到錯誤*pos = 'e';行。它說「Main.exe已停止工作」。我無法理解這個問題。你有什麼主意嗎?更改字符串數組中的字符C

int main(void) { 
    char *sehirler[] = { "Istanbul", "Ankara", "Izmir", "\0" }; 
    int i; 
    for (i = 0; *sehirler[i] != '\0'; ++i) { 
     char *pos = sehirler[i]; 
     while (*pos != '\0') { 
      if (*pos == 'a') { 
       printf("%c", *pos); 
       *pos = 'e';   //ERRROR 
      } 
      pos++; 
     } 
    } 
    return 0; 
} 

回答

5

你不是一個字符串數組,它是一個指向字符串文字的指針數組,你不能改變字符串文字。

爲了使一個數組試試這個

int main(int argc, char *argb[]) 
{ 
    char sehirler[4][9] = {"Istanbul", "Ankara", "Izmir", ""}; 
    /*   ^^ 
    *   | |__ Number of characters in `Istanbul' + '\0' 
    *   |_ Number of strings in the array 
    */ 
    int i; 
    for (i = 0 ; *sehirler[i] != '\0' ; ++i) 
    { 
     char *pos = sehirler[i]; 
     while (*pos != '\0') 
     { 
      if (*pos == 'a') 
      { 
       printf("%c", *pos); 
       *pos = 'e';   //ERRROR 
      } 
      pos++; 
     } 
    } 
    return 0; 
} 

您可能需要與malloc()分配空間,然後使用strcpy(),使文字的副本,那麼副本將被修改。

+0

謝謝你了不起的人。 :) – EngineerEngin