我正在进行K&R的练习:
编写一个程序detab,用正确数量的空格替换输入中的制表符以到达下一个制表位。
这是我目前的代码(没有对文件进行错误检查):
#include <stdio.h>
#define tab 2
#define MAX_LENGTH 1000
int main(int argc, char **argv)
{
FILE *fp = fopen(argv[1], "r+");
int c, n;
char buffer[MAX_LENGTH + 1];
for (n = 0; n < MAX_LENGTH && (c = fgetc(fp)) != EOF; ++n) {
if (c == '\t') {
for (int x = 0; x < tab; ++x)
buffer[n++] = ' ';
--n;
}
else
buffer[n] = c;
}
//buffer[n] = '\0';
//rewind(fp);
//fputs(buffer, fp);
printf("%s\n", buffer);
fclose(fp);
return 0;
}
看起来它可以工作,但我想知道为什么末尾没有需要\0
。我只是幸运吗?
n
)是否小于MAX_LENGTH
。在他的代码中,MAX_LENGTH
是最大输出长度,而不是输入。 - Timothy Jones