1. 程式人生 > >C語言中修改字串的一個字元的值

C語言中修改字串的一個字元的值

失敗的方案(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分配的物件陣列的情形,以為是記憶體區中的修改。所以也是可以實現修改字串的。