C语言字符串小写转大写解决方案
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指向常数,常数不能被改变