问题:
#include <iostream>
using namespace std;
void Trans(char *src,char *dest){;
int i=0,j=0;
for(i=0;i<strlen(src);i++){
if(i==0){
if(src[i]>='A'&&src[i]<='Z')continue;
else src[i]=src[i]-'a'+'A';
}
else if(src[i-1]==' '){
if(src[i]>='A'&&src[i]<='Z')continue;
else src[i]='A'+src[i]-'a';
}
}
for(i=0,j=0;i<strlen(src);i++)
if(src[i]!=' '){
dest[j]=src[i];
j++;
}
dest[j]='\0';
}
int main(){
//char *src="i have a dream!";
char *src=(char *)malloc(50);
src="i have a dream!";
//char src[]="i have a dream!";
char *dest=(char *)malloc(50);
Trans(src,dest);
cout<<dest<<endl;
}
问题描述:以上程序会出现内存错误,位置是src[i]=src[i]-'a'+'A'; 也就是说不能改变char *src的内容
问题分析:char *src=“i have a dream!"或者char * src=(char *)malloc(50);src=“i have a dream!"中“i have a dream!”是已经存在的字符串,以上语句只是将其初地址赋给指针src,而不是拷贝!因而不能改变,同时常量字符串存放在静态数据区,具有全局生存期。