#2
by かずま » 8年前
Ohagi さんが書きました:ファイルの終端になっても-1を返してくれないようで悩んでいます。
read() は読み込んだ文字数を返します。
ファイルの終端では、読み込めないので、0 を返します。
-1 を 0 に変更してみてください。
Ohagi さんが書きました:またread()で代入した文字列は手動でナル文字を入れる必要があると
とあるサイトでは説明されているのですが、
ここでは何もしなくてもナル文字が入っているようなのですがどうしてでしょうか?
char buf[10]; で buf は未初期化ですが、
偶然 buf[5] が '\0' だったのでしょう。
char buf[10] = "012345678"; にしてみてください。
Ohagi さんが書きました:
「buff[rc] = '\0';」でread()関数で読み込んだ配列の最後に'\0'を書き込む必要があります。 文字列の最後には'\0'が必要なためです。
これを行わないとprintf()関数などで文字列として表示できません。
'\0' を入れる方法
コード:
char buff[6];
while ((n = read(fd, buff, 5)) != 0) {
buff[n] = '\0';
printf("[%s]\n", buff);
}
'\0' を入れなくても printf は使えます。
コード:
char buff[5];
while ((n = read(fd, buff, 5)) != 0) {
printf("[%.*s]\n", n, buff);
}
[quote="Ohagi" id=3,19235,145684]ファイルの終端になっても-1を返してくれないようで悩んでいます。[/quote]
read() は読み込んだ文字数を返します。
ファイルの終端では、読み込めないので、0 を返します。
-1 を 0 に変更してみてください。
[quote="Ohagi" id=3,19235,145684]またread()で代入した文字列は手動でナル文字を入れる必要があると
とあるサイトでは説明されているのですが、
ここでは何もしなくてもナル文字が入っているようなのですがどうしてでしょうか?[/quote]
char buf[10]; で buf は未初期化ですが、
偶然 buf[5] が '\0' だったのでしょう。
char buf[10] = "012345678"; にしてみてください。
[quote="Ohagi" id=3,19235,145684]
[quote]「buff[rc] = '\0';」でread()関数で読み込んだ配列の最後に'\0'を書き込む必要があります。 文字列の最後には'\0'が必要なためです。
これを行わないとprintf()関数などで文字列として表示できません。[/quote][/quote]
'\0' を入れる方法
[code=c]
char buff[6];
while ((n = read(fd, buff, 5)) != 0) {
buff[n] = '\0';
printf("[%s]\n", buff);
}
[/code]
'\0' を入れなくても printf は使えます。
[code=c]
char buff[5];
while ((n = read(fd, buff, 5)) != 0) {
printf("[%.*s]\n", n, buff);
}
[/code]