将值赋给数组中的char

时间:2014-08-12 04:25:59

标签: c

我试图刷新我的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是空的。什么是正确的方法?

2 个答案:

答案 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终止结果!