您的位置:首页 > 编程语言 > C语言/C++

C语言中修改字符串的一个字符的值

2014-02-19 17:03 295 查看
失败的方案(1):

char *a = "abcdefg";
*(a+3) = 'n';  //想修改第四个的值为n

printf("The change qian de a is:%s\n",a);

输出时会显示段错误:Segmentation fault (core dumped)//字符串存放的内存区域不同:前者存放在常量区,不可修改

成功方案(2):

char *b,*a;
b=new char[11];
strncpy(b,"string",8);
a=b;
*(++b)='h';
//*(a+3)='n';
printf("The change hou de b is %s and a is %s\n",b,a);//字符串存放的内存区域为堆栈区,可以修改

成功方案(3):

char a[]="abcdef";
*(a+3)='n';
printf("The change qian de a is:%s\n",a);//字符串存放的内存区域为堆栈区,可以修改

原因如下:

注意char *a="abcdef"与char a[]="abcdef"的区别:1、字符串存放的内存区域不同:前者存放在常量区,不可修改,后则存放在栈中,可以修改;2、变量a存放的内容不同:前者存放的是一个地址,而后者存放的是字符串"abcdef",因此使用sizeof它们的结果是不同的,分别是4和7;此外关于new分配的对象数组的情形,以为是内存区中的修改。所以也是可以实现修改字符串的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: