我需要分配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;
}
请问有什么帮助吗?
你很近。
char *t2 = malloc(length + 1); // reserve space for a null terminator
不过,您可能希望该循环从 开始length
,而不是从 开始length - 1
。循环内的分配也是错误的(您只更改目标位置,而不是源)。确保在返回之前以空值终止字符串。
编者注:
malloc()
在 C 程序中转换返回值。sizeof(char)
是1
- 无需相乘。malloc()
。字符串反转可以在 C 中就地完成。代码有多个错误。
如前所述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;
}
char *t2 = malloc(length*sizeof(char) + 1);
你 malloc 一个指向 char 类型的指针加上一个用于零终止