2015-04-07 49 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