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

时间:2012-10-17 19:14:43

标签: c++ cstring

我一直在使用Stroustrup的C ++编程语言,而且我在早期的exersize方面遇到了困难。任务是构建一个反转c样式字符串的方法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);
}

2 个答案:

答案 0 :(得分:5)

您不能修改文字字符串,而反向函数会修改它的字符串参数。

通过传递类似的内容来测试你的反向函数:

void main()
{
    char test[] = "test";
    rev(test);
}

这将在您可以修改的数组中复制文字字符串"test"

此外,您正在递减forwardIndexbackwardIndex:您应该递增 forwardIndexforwardIndex++。这个想法是指数会在中间相遇。

答案 1 :(得分:0)

似乎你正在递减forwardIndex。第一次运行后,它将为-1。查找forwardIndex--;并更改为forwardIndex++;