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

Reverse a string not running in MinGW

本文关键字:运行 字符串 MinGW      更新时间:2023-10-16

我已经编写了代码来反转字符串。我认为逻辑是正确的。我可以编译它,但无法运行它。我正在尝试在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);
 } 

谢谢

你正在传递一个文字给你的函数,并且试图修改文字是未定义的行为。

创建一个像这样的可修改字符串:

char c[] = "Career";

最重要的是,reverse仅在字符串中有奇数个字符时起作用。你的while条件是错误的。应该是:

while(start < end)

你的代码说:

while(start != end)

,如果您的字符串有偶数个字符,则该条件始终为真。由于startend指向输入字符串之外,因此循环直到您得到分割故障。

不能更改字符串字面值,因为它位于只读内存中。

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

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

#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=%sn", c);
 }