我试图刷新我的C / C ++,我似乎忘记了如何正确操作char数组。
代码:
#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\0");
reverse(str);
return 0;
}
我非常确定我没有按照reversed[j] = str[i]
执行我打算执行的操作,因为reversed
是空的。什么是正确的方法?
答案 0 :(得分:4)
从第一眼看,在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\0");
reverse(str);
return 0;
}
另一个: 在reverse()函数中,您必须在打印后增加 j
while(i >= 0)
{
reversed[j] = str[i];
printf("%c", reversed[j]);
j++; //Moved here
i--;
}
reversed[j] = '\0' //Null termination
printf("\n %s", reversed);
或只有以下两个语句就足以发布增量j和减少i
reversed[j] = str[i--];
printf("%c", reversed[j++]);
答案 1 :(得分:3)
由于你是以输入字符串的strlen开头的(例如HAHA
- > 4),你开始复制haha [4],这是字符串末尾的空字节。 IOW你只是在开始时将null终止输出。尝试将i设置为numChar - 1
。
(解决了Santosh A提到的问题后)
然后,确保null终止结果!