gpt4 book ai didi

c - 输出末尾的问号

转载 作者:行者123 更新时间:2023-12-02 04:39:55 31 4
gpt4 key购买 nike

尝试实现 K&R 书中描述的 detab 函数 http://clc-wiki.net/wiki/K%26R2_solutions:Chapter_1:Exercise_20遇到一个问题:输出替换字符串时,输出末尾有一个问号。为什么?

#include <stdio.h>
#define MAXLINE 9999

void get_text(char output[]);
void detab(char input[], char output[], int tab_size);

int main()
{
char input[MAXLINE];
char final[MAXLINE];
get_text(input);
detab(input, final, 4);
for (int i = 0; final[i] != '\0'; ++i)
{
putchar(final[i]);
}
putchar('\n');
return 0;
}

void get_text(char output[])
{
int c;
int i = 0;
for (i = 0; i < MAXLINE && (c = getchar()) != EOF; ++i)
{
output[i] = c;
}
output[i + 1] = '\0';
}

void detab(char input[], char output[], int tab_size)
{
int c = 0;
int r = 0;
for (int i = 0; input[i] != '\0'; ++i)
{
c = input[i];
if(c == '\t')
{
for (int t = 0; t < tab_size; ++t)
{
output[r] = '.';
r++;
}
}
else
{
output[r] = c;
r++;
}
}
output[r] = '\0';
}

这是我传递包含以下内容“asdasdads tasdasdasdasdasd sadasdasd”的文件时的输出:
asdasdads....tasdasdasdasdasd....sadasdasd?(?在最后)。为什么最后有个问号?

最佳答案

output[i + 1] = '\0';

您不需要添加 1在这里,它已经在循环中完成了。 (首先 i 递增,然后 i < MAXLINE && (c = getchar()) != EOF 被测试,所以 i 已经比上一次循环迭代高了一个)

关于c - 输出末尾的问号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21069146/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com