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

来源:互联网 发布:adobe软件打不开 编辑:程序博客网 时间:2024/05/01 20:54
失败的方案(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分配的对象数组的情形,以为是内存区中的修改。所以也是可以实现修改字符串的。

0 0
原创粉丝点击