原始程序:
#include <stdio.h>
#include <string.h>
int main()
{
char *str="abcEfg";
//char str[]="abc4Efg";
int i=0;
int len=0;
len=strlen(str);
for(i=0;i<len;i=i+1)
if((str[i]>='a')&&(str[i]<='z'))
str[i]=str[i]-32;
printf("\nstr=%s\n", str);
return 0;
}
运行结果:
修改后:
#include <stdio.h>
#include <string.h>
int main()
{
char str[]="abc4Efg";
int i=0;
int len=0;
len=strlen(str);
for(i=0;i<len;i=i+1)
if((str[i]>='a')&&(str[i]<='z'))
str[i]=str[i]-32;
printf("\nstr=%s\n", str);
return 0;
}
原因:
char *str="abc4Efg";
char str[]="abc4Efg";
第一句中的"abc4Efg" 是字符串常量,相当于常量字符数组,存放于只读数据段,str指向的是那段字符串首地址,因此可以通过Str变量来读取"abc4Efg" 的元素内容, 但是不能改变它的值,否则产生不能written的错误。
char str[]="abc4Efg"; 是字符串初始化的定义,a,b,c,4,E,f,g 是分别付给str变量各个元素的值。
因此上段程序只需要将char *str="abc4Efg"; 改写为char str[]="abc4Efg"; 即可