看如下程序:
#include<stdio.h>
#include<string.h>
void swap(char *x, char *y){
char temp = *x;
*x = *y;
*y = temp;
}
void main(){
char *str = "apple"; // 這里當(dāng)修改字符內(nèi)容時(shí)3會(huì)有問(wèn)題
swap(str, str+4);
}
image
昨天遇到了如上的問(wèn)題氛雪,經(jīng)過(guò)看別人的回答和查閱書(shū)籍才明白,如下:
注意: 對(duì)于 char *str = "apple"
"apple" 存儲(chǔ)在 靜態(tài)存儲(chǔ)器(static memory)是不可以被修改的扣蜻,指針指向了該字符串首字符的地址,靜態(tài)存儲(chǔ)區(qū)的內(nèi)容是不允許修改的诫欠。對(duì)于使用數(shù)組初始化:char str[] = "apple"
艰赞,在程序運(yùn)行時(shí)把靜態(tài)存儲(chǔ)區(qū)的字符串賦值給數(shù)組,而數(shù)組元素是可以修改的提佣。
- 當(dāng)時(shí)我把主要精力放在調(diào)試temp函數(shù)里吮蛹,認(rèn)為是temp函數(shù)出現(xiàn)問(wèn)題,實(shí)際上則不然拌屏。
- 賦值的時(shí)候出現(xiàn)了問(wèn)題潮针,我就應(yīng)該考慮是不是不可以賦值去修改字符串里的內(nèi)容
- 這時(shí)候在考慮 字符串 存放到了哪里,可以修改嗎?
因此這個(gè)程序只需要把 char *str = "apple"
修改為 char str[] = "apple"
即可倚喂。如下:
#include<stdio.h>
#include<string.h>
void swap(char *x, char *y){
char temp = *x;
*x = *y;
*y = temp;
}
void main(){
// char *str = "apple"; // 這里當(dāng)修改字符內(nèi)容時(shí)3會(huì)有問(wèn)題
char str[] = "apple";
swap(str, str+4);
puts(str);
}
image
對(duì)于昨天的刷題文章里出現(xiàn)的問(wèn)題就可以解決了每篷,程序如下:
字符串反轉(zhuǎn):
#include<stdio.h>
#include<string.h>
void swap(char *x, char *y){
char temp = *x;
*x = *y;
*y = temp;
}
void reverseString(char *s, int sSize){
int left = 0;
int right = sSize-1;
while(left < right){
swap(s+left, s+right);
left++;
right--;
}
}
void main(){
char str[] = "apple"; //這個(gè)語(yǔ)句修改一下就可以了
int len = strlen(str);
reverseString(str, len);
printf("%s\n", str);
}
image
今天又解決了一個(gè)問(wèn)題,記錄一下端圈,哈哈哈焦读。
printf()