字符串不在C中打印。即使使用'\ 0'字符

时间:2019-04-07 06:24:50

标签: c

我正在尝试反转c中的输入。

java.time.Instant

我已经使用putchar测试了代码,似乎将正确的字符放置在正确的位置,但是没有输出任何内容。代码如下:

Input: Hello World

Output: dlroW olleH

Actual Output: 

2 个答案:

答案 0 :(得分:0)

至少有两个明显的问题:

  1. 如评论中所述,您需要使用line[i + 1] = '\0'而不是reverse()来终止null。
  2. r[i++] = s[--len];函数中,您需要使用r[i++] = s[len--];而不是{"message":"'UU8zSElJenNBTTRxakV1Y1FreUhCMkZlbnhiWm4xY003Vm55alBKVjpiM3pwcnpl cnQz' not a valid key=value pair (missing equal-sign) in Authorization header: 'Basic UU8zSElJenNBTTRxakV1Y1FreUhCMkZlbnhiWm4xY003Vm55alBKVjpiM3pwcnplcnQz'."}" 。否则,您将具有无效的内存访问权限。

答案 1 :(得分:0)

您必须通过 length 定义getLine()的含义。是插入数组的字符数,还是终止字符串的'\ 0'除外的字符数。这是代码注释的用途:

int getLine(char line[])
{
    int i = 0, c;

    while ((c = getchar()) != EOF && c != '\n')
    {
        line[i++] = c;
    }

    line[i] = '\0';

    return i; // return array length, not counting final \0
}

无论您决定什么,这都是没有道理的:

r[i++] = s[len--];

在一种情况下,您会将字符串终止字符'\ 0'作为新字符串的第一个字符,总是返回一个空字符串,或者在另一种情况下,您会将垃圾内存复制到新字符串中。从基于0索引的数组的角度来看, length 应该表示最后一个索引之外的一个。因此,数组中的最后一项应为s[len - 1]。建议您不要指望len,而要指望i直到达到len

void reverse(char r[], const char s[], size_t length)
{
    int i = 0;

    while (i < length)
    {
        r[i] = s[length - 1 - i];
        i++;
    }

    r[i] = '\0';
}