0

I have written the code to reverse a string. I think the logic is correct. I can compile it, but I am unable to run it. I am trying to use MinGW on windows. Can someone point out what the problem might be?

 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);
 } 

Thanks

4

3 回答 3

5

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

制作一个可修改的字符串,如下所示:

char c[] = "Career";

最重要的是,reverse仅当字符串中有奇数个字符时才有效。你的while条件不对。它应该是:

while(start < end)

你的代码说:

while(start != end)

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

于 2013-05-06T01:23:04.860 回答
4

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

尝试声明cchar c[] = "Career";

于 2013-05-06T01:12:11.303 回答
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);
 }
于 2013-05-06T01:15:09.143 回答