我尝试使用c反转字符串,但以下代码段不起作用且输出未按预期打印,
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void reverse(const char * orig);
int main(void)
{
char * string = "REVERSE";
reverse(string);
return 0;
}
void reverse(const char * orig)
{
int i = 0, j=strlen(orig);
int k = j;
printf("The string is : %s \n",orig);
char * new = (char *)malloc((j*sizeof(char))+1);
while(j > 0)
{
new[i++] = orig[j--];
}
new[k+1] = '\0';
printf("\n The Reversed string is : %s",new);
}
答案 0 :(得分:2)
在第一个循环while (j > 0)
中,j
为strlen(orig)
,因此orig[j--]
是终止'\0'
的字符串。
new[i++] = orig[j--];
其中i == 0
,new
的第一个字符表示字符串的结尾,因此结果字符串始终为空。
您可能希望将其更改为new[i++] = orig[--j];
。
您还需要将new[k+1] = '\0';
更改为new[k] = '\0';
以正确终止输出字符串new
。
答案 1 :(得分:1)
j
应从strlen(orig)-1
开始,否则您将在new
的第一个位置复制字符串终止符,从而使其成为零长度字符串; j>=0
- 您确实要复制目标字符串的第一个字符; new
; malloc
但不是free
- 因此你的reverse
功能正在泄漏记忆; const
char *
(在main
中); sizeof(char)
为1,因此将其包含在计算中是没用的; new
是C ++中的保留关键字,因此您可能希望使用不同的名称(通常C代码最终混合在C ++代码中和/或编辑器使用相同的荧光笔定义因此令人困惑的事情)。答案 2 :(得分:0)
答案 3 :(得分:0)
上面提供了用于手动编码字符串反向的答案。
但是如果你想在string.h库中使用内置函数,你可以使用: strrev(string)