C:我的反向字符串函数有什么问题?

标签 c reverse

一直在解决 leetcode 难题,并认为我很快就解决了这个难题,但我遇到了一个奇怪的错误。我的输出与预期输出相匹配,所以我不知道为什么它拒绝基于以下测试用例的解决方案。

char* reverseString(char* s) 
{
/* Sample input: "Hello"
   Sample output: "olleh"
*/

    char * reversed_string;
    char temp[1];
    int length = 0;
    int i;

    if(s == NULL)
        return NULL;

    length = strlen(s);

/* While string is not null, increment pointer */
    while(*s != NULL)
    {
        s = s + 1;
    }

/* Allocate reversed string based off length of original string */
reversed_string = malloc(length + 1);

/* Traverse backwards for length of string */
/* Copy each letter to temp */
/* Concatenate each letter to reversed_string */
    for(i = 0; i < length; i++)
    {
        s = s - 1;
        strncpy(temp, s, 1);
        strcat(reversed_string, temp);
    }

    reversed_string[length] = '\0';

/* Return reversed string */
    return reversed_string;
}

MOutput = 我的输出

EOutput = 预期输出

Input:   "?CZU.9Iw8G3K?fse,b7 m;0?f :`c9d!D'`Pem0'Du0;9i` 03F,: 7,oPw'T'5`1g!iwR5J71iJ\"f;r6L;qZaDGx?cvkS 8\"UY2u`YC P3CM y`4v 1q7P;Zd1.;:RA!oYh;!2W8xMfMx8W2!;hYo!AR:;.1dZ;P7q1 v4`y MC3P CY`u2YU\"8 Skvc?xGDaZq;L6r;f\"Ji17J5Rwi!g1`5'T'wPo,7 :,F30 `i9;0uD'0meP`'D!d9c`: f?0;Z 7b,esf?K3G8wI9.UmC?"

MOutput: "?CmU.9Iw8G3K?fse,b7 Z;0?f :`c9d!D'`Pem0'Du0;9i` 03F,: 7,oPw'T'5`1g!iwR5J71iJ"f;r6L;qZaDGx?cvkS 8"UY2u`YC P3CM y`4v 1q7P;Zd1.;:RA!oYh;!2W8xMfMx8W2!;hYo!AR:;.1dZ;P7q1 v4`y MC3P CY`u2YU"8 Skvc?xGDaZq;L6r;f"Ji17J5Rwi!g1`5'T'wPo,7 :,F30 `i9;0uD'0meP`'D!d9c`: f?0;m 7b,esf?K3G8wI9.UZC?"

EOutput: "?CmU.9Iw8G3K?fse,b7 Z;0?f :`c9d!D'`Pem0'Du0;9i` 03F,: 7,oPw'T'5`1g!iwR5J71iJ"f;r6L;qZaDGx?cvkS 8"UY2u`YC P3CM y`4v 1q7P;Zd1.;:RA!oYh;!2W8xMfMx8W2!;hYo!AR:;.1dZ;P7q1 v4`y MC3P CY`u2YU"8 Skvc?xGDaZq;L6r;f"Ji17J5Rwi!g1`5'T'wPo,7 :,F30 `i9;0uD'0meP`'D!d9c`: f?0;m 7b,esf?K3G8wI9.UZC?"

有人发现我的功能可能有什么问题吗?是否有任何未定义的行为?

最佳答案

你需要为temp分配2个字符并用0初始化,所以把它改成

char temp[2] = { 0 };

此外,在为它分配内存后初始化 reversed_string,以便第一个 strcat 正常工作。

reversed_string = malloc(length + 1);
reversed_string[0] = '\0';

关于C:我的反向字符串函数有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37430085/

相关文章:

python - 按第二个值对元组列表进行排序,reverse=True,然后按 key,reverse=False

C 结构体字符串快速排序

c - read() 嵌套后返回错误地址

c - 尝试创建一个程序来检查回文和 semordinlap

javascript - 如何使用javascript逐字反转字符串中的单词?

c++ - 使用 std::reverse 反转 vector 前几个元素的顺序

C:OR-比较多个变量以匹配某个值

c - 简单 strcat() 包装函数的段错误

c - 简单#define :d macro doesn't work in C

c++ - 在 C++ 中打印一个数组?