私は以下のコードを持っています:
#include <stdio.h>
#include <unistd.h>
int main () {
int fd = open("filename.dat", O_CREAT|O_WRONLY|O_TRUNC, 0600);
int result = write(fd, "abcdefghijklmnopqrstuvxz", 100);
printf("\n\nfd = %d, result = %d, errno = %d", fd, result, errno);
close(fd);
return 0;
}
使用可能なバイトよりも多くのバイトをファイルに書き込もうとするとどうなるかを理解しようとしています。だから私は呼び出しwrite
て、プログラムに100バイトを書き込むように依頼していますが、それよりもはるかに少ないです。結果: からのたくさんのものは に行き着きstdout
ますfilename.dat
。代わりに100
を使用するstrlen("abcdefghijklmnopqrstuvxz")
と、目的の結果が得られます。'\0'
私の質問は次のとおりです。プログラムが文字列の文字を超えて書き込もうとしているのはなぜですか? ここで未定義の動作が行われていますか?