c语言中,在一个指针数组中大小写转化的问题

int main(int argc, char *argv[]) {
char* name[4];
int i,j;
name[0]="peTer dodge";
name[1]="kEith hill";
name[2]="erIc randy";
name[3]="lisa freDo";
for(i=0;i<=3;i++){
for(j=0;j<=20;j++){
if(name[i][j]>'A'){
name[i][j]=name[i][j]+'a'-'A';
}
}
printf(" %s,",name[i]);
}
return 0;
}

代码存在两个问题:
1)name[i][j]不可以被修改,因为你给name[0]~name[3]初始化的时候用的是字符串常量的地址,所以name[0]~name[3]是指向只读区域的指针,name[i][j]的值不可修改,应该另外定义一个数组来存放输出字符串。
2)if(name[i][j]>'A')这样的条件是不够的,因为所有的小写字母的值也都比大写字母的值大。

修改后的代码如下:
int main(void)

{

const char* name[4];

char out[30];

int i,j;

name[0]="peTer dodge";

name[1]="kEith hill";

name[2]="erIc randy";

name[3]="lisa freDo";

for(i=0;i<=3;i++){

for(j=0;j<=20;j++){

if(name[i][j]>='A'&&name[i][j]<='Z'){

out[j]=name[i][j]+'a'-'A';

}

else

{

out[j]=name[i][j];

}

}

out[j]=0;

printf(" %s,",out);

}

return 0;

}追问

看懂了大多数部分但为什么在这里我无法对name[i][j]做操作呢

追答

因为你定义的name是指针数组,而偏偏你给指针们赋值的时候用了"peter"这种常量,而不是用变量地址给指针赋值。常量的值是不能修改的。

一般这种情况都会定义name为二维数组,而不是一维指针数组。二维数组的话就可以修改了。

温馨提示:答案为网友推荐,仅供参考
相似回答