为什么这个简单的c ++ c样式字符串反向方法会抛出访问冲突异常?

Ben*_*313 0 c++ cstring

我一直在使用Stroustrup的C++编程语言,而且我在早期的exersize方面遇到了困难.任务是构建一个反转ac样式字符串的方法rev.我认为我的逻辑是正确的,但是当我尝试修改字符串时出现错误.我可以不这样做吗?

int strlen_(char* string)
{
    int count = 0;
    while (*string != '\0'){
        count ++;
        string ++;
    }

    return count;
}

void rev(char* string)
{
    //length of the string is going to be useful 
    int len = strlen_(string);

    //two counters, one going forward, one going back

    int forwardIndex = 0;
    int backwardIndex = len-1; 

    char temp;
    while (forwardIndex < backwardIndex){
        temp = string[forwardIndex];
        string[forwardIndex] = string[backwardIndex];   //Exception Here
        string[backwardIndex] = temp;
        forwardIndex--;
        backwardIndex--;
    }

}

void main()
{
    char* test = "test"; 
    rev(test);
}
Run Code Online (Sandbox Code Playgroud)

pb2*_*b2q 5

你不能修改文字字符串,你的反向函数修改它的字符串参数.

通过传递这样的东西来测试你的反向函数:

void main()
{
    char test[] = "test";
    rev(test);
}
Run Code Online (Sandbox Code Playgroud)

这将"test"在您可以修改的数组中创建文字字符串的副本.

此外,你既递减forwardIndexbackwardIndex:你应该增加 forwardIndex:forwardIndex++.这个想法是指数将在中间相遇.