c - 需要帮助查找错误,如果字符串输入由所有相同字符组成,则输出字符已损坏

标签 c arrays string memory-management cstring

reverser() 反转 cstring(未就位)。 99% 的时间它都能工作,但某些输入会破坏它,例如,如果为 aStr2[] 分配了一个由相同字符组成的字符串,它就会出现错误。

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

char* reverser(const char *str);

int main()
{
    char aStr[] = "aaa";
    char aStr2[] = "cccccc";
    printf("%s %s", aStr, aStr2);
    char* tmp = reverser(aStr2);//tmp now has garbage
    printf("\n%s", tmp);
    printf(" %s", aStr2);
    return 0;
}


char* reverser(const char *str)
{
    char* revStr = (char*)malloc(strlen(str));
    int i;
    for(i = strlen(str)-1; i >= 0; i--)
{
        revStr[strlen(str)-1-i] = str[i];
}
    return revStr;
}

给予

aaa cccccc
cccccc9 cccccc
Process returned 0 (0x0)   execution time : 0.068 s
Press any key to continue

注意不应该出现的 9。

最佳答案

将此 malloc 更改为 strlen(str) + 1 ,为 '\0' 加上 1

char* revStr = (char*)malloc(strlen(str) + 1);

在for循环之后

revStr[strlen(str)+1] = '\0';

关于c - 需要帮助查找错误,如果字符串输入由所有相同字符组成,则输出字符已损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19179182/

相关文章:

javascript - 在 Neo4j 中以对象数组形式检索数据

javascript - 在通过套接字发送到客户端之前压缩中等大小的 JavaScript 数组是否值得?

c - GotoXY 没有像我预期的那样工作

c++ - 将 C bison 解析器移植到 C++

javascript - 从对象数组中获取 JavaScript 对象

python - 有没有特定的方法可以在新行的开头输入字符?

java - 方法如何接收字符串作为输入并给出 int 作为输出

java - C和Java中的字符

c - 如果更喜欢使用 -ffast-math,则 double 的良好标记值

python - 初学者不确定如何在抓取时加入列表