【问题标题】:Printing a reversed string/array in C在 C 中打印一个反转的字符串/数组
【发布时间】:2026-02-07 06:20:12
【问题描述】:

我正在尝试打印一个反转的字符串/数组。我使用了下面的代码,它似乎能够从第一个数组string 以正确的顺序为我的第二个数组revString 提供值。我还可以在两个数组中打印单个字符,并且可以打印第一个数组的整个字符串。但是 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 语句没有做任何事情

【问题讨论】:

  • 我认为它会打印值,但您的程序在值显示到控制台之前退出。在%s 之后添加\n 以查看打印输出。
  • 您想仔细检查源字符串的索引。源数组的哪些元素在第一次迭代期间访问?
  • 您也可能想阅读以下内容:How to debug small programs
  • character = &string[i]; revString[i_2] = *character; 是一种非常迂回的说法revString[i_2] = string[i];
  • 最后的 printf 语句没有做任何事情,因为反转字符串的第一个字符是 ____(填空;如有必要,请使用调试器)。

标签: c arrays printf c-strings


【解决方案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

【讨论】:

    【解决方案2】:

    在 C 语言中,索引是从 0 开始的。所以,如果你创建一个长度为 10 的字符串,最后一个字符将在索引 9 处。

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

    你的代码应该是这样的..

    int i = strlen(string) - 1;

    【讨论】:

      最近更新 更多