0

私はこのコードスニペットを持っています:

struct stat *fileData;
if((fd=open("abc.txt",O_RDONLY)==-1)
      perror("file not opened");
if((fstat(fd,fileData)==-1)
      perror("stucture not filled");
printf("%d",fileData.st_size);

それは私にエラーを示しています:

 request for member ‘st_size’ in something not a structure or union

使ってみstatました。

4

2 に答える 2

3

現状では、初期化されていないポインタに(is)を書き込んfstatでから、あたかもそれが。であるかのようにそこから読み取ろうとしていますstruct stat。コードを次のように変更する必要があります。

struct stat fileData;
if((fstat(fd, &fileData) == -1)
              ^

mallocまたは、メモリを使用してfileDataからを使用することもできますfileData->st_size。これはあまりエレガントではありません(あなたはそうしなければならないでしょうfreeなど)。

于 2012-08-20T10:18:58.723 に答える
0

あなたのfileData構造体はポインタです。またはfileData.st_sizeする必要がありますfileData->st.size(*fileDate).st_size

ただし、stat()は、構造体統計用のストレージを提供することを想定しています。

struct stat fileData; // <---change to this
if((fd=open("abc.txt",O_RDONLY)==-1)
      perror("file not opened");
if((fstat(fd,&fileData)==-1)  // <---change to this
      perror("stucture not filled");
printf("%d",fileData.st_size);
于 2012-08-20T10:20:30.057 に答える