char* 所指向的字符串无法修改(顺便贴下自己在火车下写的一个字符串处理函数)

char* 所指向的字符串无法修改(顺便贴上自己在火车上写的一个字符串处理函数)
一直不明白为什么,为什么它只能指向常量?

------解决方案--------------------
一般情况,编译器会把字符指针指向的字串默认初始化为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;
}

------解决方案--------------------
探讨
一般情况,编译器会把字符指针指向的字串默认初始化为const。不允许你进行修改。但是有部分的编译器还是允许你进行修改的。

------解决方案--------------------
把你传进这个函数里的那个字符串的定义贴上来
------解决方案--------------------
printf("%s",strCuterA("gfwodef12ewewe","12",strlen("gfwodef12ewewe"),strlen("12"),false));
"gfwodef12ewewe" 这是一个常量字符串 不能对他进行修改 就这样
------解决方案--------------------
支持
探讨

把你传进这个函数里的那个字符串的定义贴上来

------解决方案--------------------
探讨
引用:

引用:
一般情况,编译器会把字符指针指向的字串默认初始化为const。不允许你进行修改。但是有部分的编译器还是允许你进行修改的。

目前尚未看懂你的意思 你能给出一个单元测试的程序吗



以字符串当中的指定部分为标记,截取字符串
比如,以*为标记,就截取*号以前或者以后的字符串
你可以在main函数里这样调用:

C/C++ c……

------解决方案--------------------
探讨
引用:

引用:
引用:

引用:
一般情况,编译器会把字符指针指向的字串默认初始化为const。不允许你进行修改。但是有部分的编译器还是允许你进行修改的。

目前尚未看懂你的意思 你能给出一个单元测试的程序吗



以字符串当中的指定部分为标记,截取字符串
比如,以*为标记,就截取*号以前或者以后的字符串……

------解决方案--------------------
楼主的代码是对的,只要传入参数不是字符串常量即可;
关于常量字符串不能修改的这个属性,就没必要去钻空子去规避它了,就算达到效果也是不稳健的;
如果非要操作一个字符串常量,就把它改成赋值到变量即可,如:

char *str = "abcdefg";

char str1[32];
strcpy(str1, str);
strCuterA(str1, ....);

如果想简单操作,以下的语句也是可行的:

char str[32] = "abcdefg";

strCuterA(str, ....);

但以下是不合理的,尽管可能有的编译器认可:
strCuterA("abcdefg", ....);