我试着改变一个'字符串数组中的字符为' e'但是我收到错误*pos = 'e';
行。它说" Main.exe已停止工作"。我无法理解这个问题。你有什么想法吗?
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;
}
答案 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()
制作文字的副本,然后副本就可以修改。