あなたのコードでもっとうまくできたかもしれないことがいくつかあります:
- コードは、読み取られた文字数をチェックしません。行が短すぎましたか?
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;
}
上記のスニペットが自明であることを願っています。ただし、説明が必要な点がある場合は、遠慮なくお問い合わせください。
幸運を!