char* 所指向的字符串无法修改(顺便贴下自己在火车下写的一个字符串处理函数)
char* 所指向的字符串无法修改(顺便贴上自己在火车上写的一个字符串处理函数)
一直不明白为什么,为什么它只能指向常量?
------解决方案--------------------
一般情况,编译器会把字符指针指向的字串默认初始化为const。不允许你进行修改。但是有部分的编译器还是允许你进行修改的。
------解决方案--------------------
一直不明白为什么,为什么它只能指向常量?
------解决方案--------------------
一般情况,编译器会把字符指针指向的字串默认初始化为const。不允许你进行修改。但是有部分的编译器还是允许你进行修改的。
------解决方案--------------------
- C/C++ code
void func(char buff[]) { buff[0] = 'a'; } int _tmain(int argc, _TCHAR* argv[]) { char buff[255] = {0}; char* pstr1 = "123"; const char* pstr2 = "123"; func(buff); //buff变成'a'了 func(pstr1); //崩溃 func(pstr2); //编译不通过 func((char*)pstr2); //崩溃 return 0; }
------解决方案--------------------
------解决方案--------------------
把你传进这个函数里的那个字符串的定义贴上来
------解决方案--------------------
printf("%s",strCuterA("gfwodef12ewewe","12",strlen("gfwodef12ewewe"),strlen("12"),false));
"gfwodef12ewewe" 这是一个常量字符串 不能对他进行修改 就这样
------解决方案--------------------
支持
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
楼主的代码是对的,只要传入参数不是字符串常量即可;
关于常量字符串不能修改的这个属性,就没必要去钻空子去规避它了,就算达到效果也是不稳健的;
如果非要操作一个字符串常量,就把它改成赋值到变量即可,如:
char *str = "abcdefg";
char str1[32];
strcpy(str1, str);
strCuterA(str1, ....);
如果想简单操作,以下的语句也是可行的:
char str[32] = "abcdefg";
strCuterA(str, ....);
但以下是不合理的,尽管可能有的编译器认可:
strCuterA("abcdefg", ....);