反转c型字符串

时间:2010-08-16 20:24:56

标签: c++ c-strings

这是我的代码:

    void reverseStr(char *str)
{
    if (str == NULL) return;
    int i=0, j=strlen(str) -1;
    while(i<j)
    {
        char temp = str[j];  //i think this is the cause of the problem
        str[j] = str[i];
        str[i] = temp;
        i++;
        j--;
    }
}

所以这就是它所在的地方:

int main()
{   
    char *str = "Forest Gump";
    reverseStr(str);
    cout << str;
}

这是我的错误:

  

/Applications/TextMate.app/Contents/SharedSupport/Bundles/C.tmbundle/Support/bin/bootstrap.sh:   第7行:1931年公交车错误“$ 3”.out

有什么想法?提前谢谢。

3 个答案:

答案 0 :(得分:8)

指向固定字符串的指针。你正在修改它。换句话说,您尝试更改文本文字。试试这个:

char *str = strdup("Forest Gump"); 
reverseStr(str); 
cout << str; 
free(str);

答案 1 :(得分:4)

字符串文字是只读内存,你不能反转它们,也不能以任何方式修改它们而不会遇到未定义的行为。

首先将字符串复制到缓冲区中,然后传入缓冲区。或者声明一个数组而不是一个指针,并使用字符串初始化器初始化该数组。

答案 2 :(得分:0)

错误发生在程序中没有的bash / shell脚本中。你也可以发布bash脚本吗?