c - 字符串反转 - 段错误

标签 c string reverse

这不是重复的 qn。使用一种新方法来反转已询问的 qn 中的字符串。

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

char *revStr(char *str)
{
    int i = 0, j = 0, count = 0;
    char *retStr;

    while(str[count] != '\0')
    {
        printf("first %c for %d\n", str[count], count);
        count++;
    }

    count--;

    for (i = count, j = 0; i >= 0, j<=count; i--, j++)
    {
        //printf("sec %c for %d\n", str[i], i);
        retStr[i] = str[j];
        printf("thrd %c for %d\n", retStr[i], i);
    }
    return retStr;
}

int main()
{
    char *str = NULL, *revStr2 = NULL;
    str = (char *) malloc (5);
    strcpy(str, "hello");
    printf("\n%s\n", str);
    printf("\n%s\n", revStr(str));
}

给我输出 输出:


hello
first h for 0
first e for 1
first l for 2
first l for 3
first o for 4
thrd h for 4
thrd e for 3
thrd l for 2
thrd l for 1
thrd o for 0
olleh

Segmentation fault


有人可以帮助如何使用此方法实现字符串反转吗? 谢谢, 普雷蒂

最佳答案

您需要为 retstr 分配内存,如下所示

char *revStr(char *str)
{
    int i = 0, j = 0, count = 0;
    while(str[count] != '\0')
    {
        printf("first %c for %d\n", str[count], count);
        count++;
    }
 char *retStr = (char*)malloc(count);
    count--;

    for (i = count, j = 0; i >= 0, j<=count; i--, j++)
    {
        //printf("sec %c for %d\n", str[i], i);
        retStr[i] = str[j];
        printf("thrd %c for %d\n", retStr[i], i);
    }
    return retStr;
}

关于c - 字符串反转 - 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60222649/

相关文章:

c - K&R 练习 1-14

ios - 如何将 __autoreleasing 地址保留为类中的强属性?

C++ 字符串溢出

c - strrev 函数在函数内部不起作用,但在外部起作用

list - 理解 Prolog 列表和递归

java - 需要帮助逆向工程算法

c - 指针作为 C 中的函数参数

c++ - -十六进制文字的 Wsign 转换警告

Java Regex : Allow only certain characters, 但不允许某些字符开始字符串?

string - EL 中的字符串使用单引号或双引号