为什么我的阵列打印不正确?

时间:2016-10-08 15:21:35

标签: c arrays c-strings

我编写了一个反转数组的简单程序。例如,字符串' hello'将打印出来作为' olleh'。然而,当我输入类似' hello'之类的东西时,它打印出一半字符串反转,然后是一些神秘的字符和其他不应该存在的废话。

我的源代码如下:

#include <stdio.h>
#include <string.h>

int main()
{
    char str[100], temp;
    int i = 0, j = 0;

    printf("Enter a string:\n");
    fgets(str, 100, stdin);
//  scanf("%s", &str);

    j = strlen(str) - 1;
    while (i < j) {
        temp = str[i];
        str[i] = str[j];
        str[j] = str[temp];
        i++;
        j--;
    }

    printf("The reversed string is: %s", str);

    return (0);
}

我得到的一些输出是&#39; oll&#39;然后是一个里面有四个数字的小方块。这可能会有所不同,有时印刷&#39; olx&#39;或者&#39; olH&#39;甚至&#39; ol&#39;带有钻石形状的问号。为什么我的程序不能正常工作?数组是否已包含其他一些编码信息?

2 个答案:

答案 0 :(得分:3)

让我们仔细看看这两行:

temp = str[i];
...
str[j] = str[temp];

首先,您将temp设置为str[i]中的字符。另一个使用temp作为索引str。但是temp不是一个索引,而是一个角色。所以最后一行应该是

str[j] = temp;

答案 1 :(得分:1)

你的算法很好。你只需要替换

str[j] = str[temp];

通过

str[j] = temp;