使用指针C ++进行字符串反转

时间:2012-10-22 00:00:04

标签: c++ string pointers char reverse

  

可能重复:
  Why do I get a segmentation fault when writing to a string?

我想写一个简单的C ++函数来反转a string / char[]只用指针算法。我理解这个概念 并且已经输入了代码。

我有以下.cpp文件:

#include <iostream>
using std::cout;
using std::endl;

void reverse(char* target) //Requirements specify to have this argument
{
    cout << "Before :" << target << endl; // Print out the word to be reversed
    if(strlen(target) > 1) // Check incase no word or 1 letter word is placed
    {
        char* firstChar = &target[0]; // First Char of char array
        char* lastChar = &target[strlen(target) - 1]; //Last Char of char array
        char temp; // Temp char to swap
        while(firstChar < lastChar) // File the first char position is below the last char position
        {
            temp = *firstChar; // Temp gets the firstChar
            *firstChar = *lastChar; // firstChar now gets lastChar
            *lastChar = temp; // lastChar now gets temp (firstChar)
            firstChar++; // Move position of firstChar up one
            lastChar--; // Move position of lastChar down one and repeat loop
        }
    }
    cout << "After :" << target << endl; // Print out end result.
}

void main()
{
    reverse("Test"); //Expect output to be 'tseT'
}

我已经多次调试调试器,但每次都是这样 在while循环中的temp = *firstChar行周围崩溃。它 冻结在这里导致程序停止运行而无法运行 完。有什么我只是俯视或在那里 更深层次的问题,为什么我不能这样做。

编辑:还有其他条件,但我为了这个而删除了它 简洁。这是在if声明后,它只是提示了 单词是1个字符或没有单词。

2 个答案:

答案 0 :(得分:8)

问题不在于reverse函数,而在于调用代码。

reverse("Test");

字符串文字是只读的,尝试修改字符串文字会导致未定义的行为。注意编译器警告(如果你没有得到任何警告,请调高警告级别)。上面的一行应该会生成有关已执行的const char *char *已弃用转化的警告。

修复代码:

int main() // <-- note the return type, int NOT void!
{
  char str[] = "Test";
  reverse( str );
}

答案 1 :(得分:0)

此代码将反转两次。将循环除以2。