我正在尝试反转c中的输入。
java.time.Instant
我已经使用putchar测试了代码,似乎将正确的字符放置在正确的位置,但是没有输出任何内容。代码如下:
Input: Hello World
Output: dlroW olleH
Actual Output:
答案 0 :(得分:0)
至少有两个明显的问题:
line[i + 1] = '\0'
而不是reverse()
来终止null。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';
}