首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C语言字符串小写转大写解决方案

2012-03-17 
C语言字符串小写转大写为什么是段错误?哪里出错了呢C/C++ code#include stdio.h#include ctype.hchar

C语言字符串小写转大写
为什么是段错误?哪里出错了呢

C/C++ code
#include <stdio.h>#include <ctype.h>char *maiusolo(char *stringa);int main(){   char *s= "women";   char *wan=maiusolo(s);      for(; *wan != '\0';wan++)   printf("%c\n",*wan);     return 0;     }     char *maiusolo(char *stringa){   char *p1;   p1 = stringa;   char tmp,*p2=NULL;           for(; *stringa!='\0'; stringa++){   tmp = toupper(*stringa);   *stringa=tmp;   // printf("%c\n",tmp);   }    //*p2='\0';   return p1;   }   


[解决办法]
*stringa=tmp; 

这一段错了 指针指向指是不能修改的 可以定义一个数组 把数组的地址传回去
[解决办法]
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
char *maiusolo(char *stringa);


int main(){
char *s= "women";
char *wan=maiusolo(s);

for(; *wan != '\0';wan++)
printf("%c\n",*wan);

return 0;
}

char *maiusolo(char *stringa){
char *p1;
static char p2[20];
char tmp;

p1=p2; 
for(int i=0; *stringa!='\0'; stringa++, i++){
tmp = toupper(*stringa);
*(p2+i)=tmp; 


}
*(p2+i)='\0';

return p1;
}

比较笨的方法
[解决办法]
char *s= "women";

修改字符串常量是未定义的行为
[解决办法]
修改常量字符串了……
[解决办法]
char *s= "women";字符串常量是只读的,不可以修改。你可以通过gdb调试定位到出现段错误的行号,你可以改一下:char s[] = "women";就不会出现段错误了。
[解决办法]
楼上回答都正确~
[解决办法]
char *s= "women";
常量,存在静态区
*stringa=tmp; 不能改变里面的值
stringa为传过来的S,S指向常数,常数不能被改变

热点排行
Bad Request.