反转未在MinGW中运行的字符串

时间:2013-05-06 01:09:31

标签: c++ c string pointers

我已经编写了反转字符串的代码。我认为逻辑是正确的。我可以编译它,但我无法运行它。我想在Windows上使用MinGW。有人能指出问题可能是什么吗?

 void reverse(char * start, char * end){
    char ch;
    while(start != end){
        ch = *start;
        *start++ = *end;
        *end-- = ch;
    }
 }

 int main(){
    char *c = (char *)"Career";
    int length = strlen(c);
    reverse(c,c+length-1);
 } 

由于

3 个答案:

答案 0 :(得分:5)

您正在将文字传递给您的函数,并且尝试修改文字是未定义的行为。

制作一个可修改的字符串:

char c[] = "Career";

最重要的是,reverse仅在字符串中包含奇数个字符时才有效。您的while条件错误。它应该是:

while(start < end)

你的代码说:

while(start != end)

如果您的字符串具有偶数个字符,则该条件始终为true。因此循环直到你得到分段错误,因为startend指向输入字符串之外。

答案 1 :(得分:4)

您无法更改字符串文字,因为它位于只读内存中。

尝试将c声明为char c[] = "Career";

答案 2 :(得分:0)

您的代码无法编译的原因是您需要添加

#include <string.h>

到文件顶部,以定义strlen函数。

另外

while(start != end){

生成

Segmentation fault (core dumped)
长度为偶数个字符串的

错误。

将此更改为

while(start < end){

并且该错误将消失。

这是一个完整的工作版本:

#include <stdio.h>
#include <string.h>

 void reverse(char * start, char * end){
    char ch;
    while(start < end){
        ch = *start;
        *start++ = *end;
        *end-- = ch;
    }
 }

 int main(){
    char c[] = "Career";
    int length = strlen(c);
    reverse(c,c+length-1);
    printf("c=%s\n", c);
 }