ここで私はLinuxでc read関数に関する奇妙な問題を抱えています。奇妙な読み取りバッファー
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
int main(int argc, char** argv){
int fd=open("a.c",O_RDONLY);
if(fd==-1){
fprintf(stderr,"%s\n",strerror(errno));
}
char buf[10];
if(read(fd,buf,9)==-1){
fprintf(stderr,"%s\n",strerror(errno));
}else{
printf("%s\n",buf);
}
}
iはbufがゼロに初期化されるべきだと思うので、読んで最初の9文字はバッファリングするために、最後の一つは、文字列と同じように「\ 0」であると。しかしresuleは、以下、奇数である交流ファイルと、このプログラムの結果である、 交流
1234567890abcd
結果
1234567893øþzôo`
は、この文字列がバッファの外で、私は何が起こったのかを把握することはできませんようです誰も助けてくれますか?ありがとう。
また、 'char buf [10] = {0};'です。 – Hugh
は0に設定されていますが、デフォルトではコンパイラがbufをゼロに初期化しなかったのはなぜですか? ** static char buf [10] **にコードを変更すると、正しい出力が得られます。** char buf [10] **と** static char buf [10] **の静的持続時間は同じですが、同じようにデフォルトで初期化する必要があります –
ok。私はそれを得た、彼らは異なっている、私は間違いを理解した。 'char buf [10]'はmain()ブロック内にあるため初期化されません。あなたに感謝します。 –