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。
最佳答案
将此 malloc 更改为 strlen(str) + 1 ,为 '\0' 加上 1
char* revStr = (char*)malloc(strlen(str) + 1);
在for循环之后
revStr[strlen(str)+1] = '\0';
关于c - 需要帮助查找错误,如果字符串输入由所有相同字符组成,则输出字符已损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19179182/