在C中打印反向的字符串/数组

时间:2018-09-09 10:44:03

标签: c arrays printf c-strings

我正在尝试打印反向的字符串/数组。我使用了以下代码,它似乎能够按照第一个数组revString的正确顺序提供第二个数组string的值。我还可以在两个数组中打印单个字符,并且可以打印第一个数组的整个字符串。但是revString数组根本不打印。我想知道我是否在这里遗漏了一个要点。

void reverseString(char string[]) {
    int i = strlen(string);
    int i_2 = 0;
    revString arrayet
    char revString[i + 1];
    char *character; 

    while (i > -1) {
        character = &string[i];
        revString[i_2] = *character;
        printf("%c", revString[i_2]);
        i = i - 1;
        i_2 = i_2 + 1;
    }
    revString[i_2] = '\0';
    printf("%d\n", i_2);
    printf("%s", revString);
}

代码现在给出以下输出,并带有示例字符串"Hello World";

dlrow olleH13

如您所见,最终的printf语句不起作用

2 个答案:

答案 0 :(得分:2)

在C语言中,索引基于0。因此,如果您输入长度为10的字符串,则最后一个字符将位于索引9。

在您的代码中,当您向revString分配字符时,您的代码正在尝试访问string [len]。

您的代码应该是这样的。

int i = strlen(string) - 1;

答案 1 :(得分:1)

您的代码会反转字符串string,其中包括位于string[i]的空终止符。结果数组以空终止符开头,因此printf不输出任何内容。

这是修改后的版本:

void reverseString(char string[]) {
    int i = strlen(string);
    int i_2 = 0;
    char revString[i + 1];
    char character;

    while (i > 0) {
        i = i - 1;
        character = string[i];
        revString[i_2] = character;
        //printf("%c", revString[i_2]);
        i_2 = i_2 + 1;
    }
    revString[i_2] = '\0';
    printf("%d\n", i_2);
    printf("%s", revString);
}

输出:

11
dlrow olleH