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。
答案 0 :(得分:2)
您的问题是您没有将字符串终止符放在反向字符串中。 C中的所有字符串实际上是strlen
未报告的一个额外字符,即字符'\0'
(或简单和简单,零)。这告诉字符串结束时所有C函数。
因此,您需要在malloc
调用中为此额外终结符字符分配空间,并将其添加到字符串中的最后一个字符之后。
您的代码还存在其他一些问题,首先是您不应该转换malloc
(或任何其他返回void *
的函数)。另一个是你有内存泄漏,你没有释放你分配的内存。最后一点在像你这里的小程序中并不重要,但在较大和较长时间运行的程序中会出现问题。
答案 1 :(得分:2)
将此malloc更改为strlen(str)+ 1,加上1为'\ 0'
char* revStr = (char*)malloc(strlen(str) + 1);
和for循环之后
revStr[strlen(str)+1] = '\0';
答案 2 :(得分:0)
你没有以空的方式终止你的反向字符串。您需要将revStr []的最终索引设置为0。