使用 putchar 函数打印出数组时出现问题获得一拳符号作为输出

问题描述

#include <stdio.h>

void print_rev(char *s);

int main(void)
{
    char *str;
    str = "I do not fear computers. I fear the lack of them - Isaac Asimov";
    print_rev(str);
    return (0);
}

// read array and print it out backwards char by char.
void print_rev(char *s)
{
    int arrLength;

    arrLength = 0;

    // capture length of array
    while (*s != '\0') {
        arrLength++;
        s++;
    }

    arrLength--;

    // print array backwards
    for (; arrLength >= 0; arrLength--) {
        putchar(s[arrLength]);
    }

    putchar('\n');
}

这是我的代码。当我运行它时,我所能做的就是让它打印出这个输出picture of output

我尝试研究为什么会发生这种情况,但我找不到人们使用 putchar 而不是 printf 的任何视频。非常感谢帮助。

我的代码的重点是获取字符串并使用 putchar 反转它。 我无法使用函数 strlen()

预期输出

vomisA caasI - meht fo kcal eht raef I .sretupmoc raef ton od I

解决方法

print_rev() 中,在您重新发明 strlen() 轮的第一遍期间,您还增加了 s 以指向终止的 NUL 字符。

在最后一个循环中,您正在重用 s,就好像它没有改变一样:s[arrLength] 显然指向字符串的外部,因为 s 指向它的末尾。>

解决方案:改变

for (; arrLength >= 0; arrLength--) {
    putchar(s[arrLength]);
}

for (; arrLength >= 0; arrLength--) {
    s--;
    putchar(*s);
}