我正试图刷上我的C/c++,我似乎已经忘记了如何正确地操作字符数组。
代码:#include <iostream>
#include <string.h>
void reverse(char* str)
{
int numChar = strlen(str);
char *reversed = (char*)malloc(sizeof(char) * (numChar + 1));
int i = numChar;
int j = 0;
while(i >= 0)
{
reversed[j] = str[i];
j++;
i--;
printf("%c", reversed[j]);
}
printf("%s", reversed);
}
int main()
{
char* str;
strcpy(str, "apple ");
reverse(str);
return 0;
}
我很确定我没有做我想做的reversed[j] = str[i]
,因为reversed
是空的。正确的做法是什么?
乍一看,在main()中,在strcpy
中引用字符指针str之前,必须分配内存给它int main()
{
char* str = malloc(6) or use char str[6];
// or char *str = "apple"; is sufficient, strcpy is not required in this case
strcpy(str, "apple ");
reverse(str);
return 0;
}
另一个:在reverse()函数中,您必须在打印
后增加jwhile(i >= 0)
{
reversed[j] = str[i];
printf("%c", reversed[j]);
j++; //Moved here
i--;
}
reversed[j] = ' ' //Null termination
printf("n %s", reversed);
或只有以下两条语句足以后置自增j和自减i
reversed[j] = str[i--];
printf("%c", reversed[j++]);
由于您开始使用i作为输入字符串的字符串(例如HAHA
-> 4),因此您开始复制haha[4],这是字符串末尾的空字节。现在,您刚刚在开始时终止了输出。尝试将i设置为numChar - 1
。
(修复Santosh A提到的问题后)
然后,确保以null终止结果!