在您的代码中可以做得更好的事情很少:
- 该代码不检查读取了多少个字符。一条线太短了吗?
- 目前尚不清楚为什么
strncpy
要检查NULL
. 它不返回NULL
。
- 目前尚不清楚您是否初始化
line
以及初始化lenght
为什么值。
- 不幸的是,很难成为通灵者并猜测它是
replaceletter
什么,它做什么,以及如何tab
和ch
被宣布。
- 为什么在循环
strncpy
中调用是一个谜。while
- 您的程序似乎没有将换行符作为返回字符串的一部分。
换句话说,如果您想获得或多或少足够的帮助,最好提供一个小型、完整且有效的示例来展示您的问题。
如果我被分配了那个任务,我可能会这样写:
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
int main(void)
{
int ret = EXIT_SUCCESS;
char *line = NULL;
size_t linecap = 0;
ssize_t len;
do {
len = getline(&line, &linecap, stdin);
if (len == -1) {
if (errno != 0) {
perror("readline");
ret = EXIT_FAILURE;
}
break;
}
if (len < 4)
continue; /* Line is too short, try again */
/* printf("The line is: %s", line); */
printf("First three letters are: '%.*s'\n", 3, line);
} while(1);
free(line); /* It is always a good idea to cleanup after yourself */
return ret;
}
我希望上面的片段是不言自明的。但是,如果有什么需要澄清的,请不要犹豫。
祝你好运!