0

我需要分配t2,但我不知道如何分配。

char *reverse(char *t)
{
    int length= strlen(t);
    char *t2 = (char *) malloc(length * sizeof(char*));
    for(int i= (length-1);i>=0;i--)
       t2[i]=t[length-1];
    return t2;
}

请问有什么帮助吗?

4

3 回答 3

3

你很近。

char *t2 = malloc(length + 1); // reserve space for a null terminator

不过,您可能希望该循环从 开始length,而不是从 开始length - 1。循环内的分配也是错误的(您只更改目标位置,而不是源)。确保在返回之前以空值终止字符串。

编者注:

  1. 您不需要malloc()在 C 程序中转换返回值。
  2. sizeof(char)1- 无需相乘。
  3. 根据您正在寻找的语义,您可能根本不需要malloc()。字符串反转可以在 C 中就地完成。
于 2013-03-05T19:34:51.490 回答
2

代码有多个错误。

如前所述sizeof(char) != sizeof(char*),前者是 char 的大小,其次是指针的大小。

此外,循环只为 t2 中的所有索引分配相同的值 t2[i]=t[length-1];

此外,它应该接受一个const char*作为参数,因此即使是 const char* 字符串也可以传递给它。

\0字符串末尾没有设置空字符。

这段代码应该这样做:

char* reverse(const char *t)
{
    int length= strlen(t);
    char* t2 = (char*)malloc((length+1) * sizeof(char));
    for(int i=0;i<length;i++)
    {
      t2[(length-1)-i]=t[i];
    }
    t2[length] = '\0';
    return t2;
}
于 2013-03-05T19:57:33.227 回答
0
char *t2 = malloc(length*sizeof(char) + 1);

你 malloc 一个指向 char 类型的指针加上一个用于零终止

于 2013-03-05T19:36:04.470 回答