<span style="font-size: 18px;">今天看到一个帖子,帖子内容大概就是用C语言实现把字符串中的小写字符修改成大写的字符,看到了感觉这还不简单,但是一直出现关于内存的问题。</span>
void change(char *str){
char *p = str;
while(*p!='\0'){
if(*p>='a' && *p<='z'){
printf("%c\n",*p);
*p= *p - 'a' + 'A';
}
p++;
}
}
这段代码本身没有错误,但是如何去用它也很关键。
int main()
{
char *p = "school";
printf("%s\n",p);
change(p);
printf("%s\n",p);
return 0;
}
开始的时候以上面的方式调用,但是一直出现内存错误,百思不得其解。
后面突然想起p指向一个常量字符串,其不可以修改,相当于静态字符串,若要变成可修改的字符串,需要给字符串赋予一个动态存储空间,使其具有可变性。
int main()
{
char *str = (char *)malloc(sizeof(char)*50);
char *p = "school",*tempstr=str;/* p为需要修改的字符串 */
while(*p!=NULL){
*(tempstr++)=*p++;
}
*tempstr='\0';/* 为str添加字符结束符 */
printf("%s\n",str);
change(str);
printf("%s\n",str);
return 0;
}