给数组中的字符赋值

  • 本文关键字:字符 赋值 数组
  • 更新时间 :
  • 英文 :


我正试图刷上我的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()函数中,您必须在打印

后增加j
while(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终止结果!

最新更新