1

私は現在、大学で C 言語を学んでいるので、これは宿題ですが、小さな問題があります。構文を誤って判断したか、本当に明白な何かが欠けていると思います。私のコンパイラは、次のものがあると私に言っています:

予期される宣言指定子または定数の前の「...」

と を指していO_RDWRます。

Stack Exchange でグーグル検索して検索しましたが、それに固有のものはないようです。C リファレンスの構文に従えば問題ありません。私は周りを見回して、typedefを事前定義していないと言っていますが、それを試してみましたが役に立ちませんでした。

コンパイラによると、問題を引き起こしているセクションにスターを付けました**

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>

int main (int argc, char *argv[])
{
    int count;

    printf ("This program was called  \"%s\".\n",argv[0]);

    if (argc > 1)
    {
        for (count = 1; count < argc; count++)
        {
            printf("argv[%d] = %s\n", count, argv[count]);
        }
    }
    else
    {
        printf("The command had no arguments.\n");
    }

    if  (argc == 4)
    {
        printf("There are the correct number of arguments(4)");
    }
    else
    {
        printf("Not enough arguments! please try again");
    }

    **int open(const char *argv[1], O_RDWR);

    return 0;**
}
4

3 に答える 3

2

試してみてくださいopen(argv[1], O_RDWR);- 引数の型や戻り値を指定する必要はありません。

...そして、**は問題領域を強調するためだけのものだと思います-そうでない場合は、それらも使用する必要があります...編集:あなたが質問でそれを言ったことに気づきました!

于 2012-09-20T23:12:46.450 に答える
2
int open(const char *argv[1], O_RDWR); 

この発言で何をしようとしているのか? コンパイラはこれを関数呼び出しではなく関数宣言として扱います。O_RDWR は型名ではないため、失敗します。を呼び出す必要がある場合open()、構文は次のようになります。

int fd = open(argv[1], O_RDWR);
if(fd != -1)
{
   // File opened OK. Proceed with file operations.
}
else
{
   // File failed to open. Handle error occured
}
于 2012-09-20T23:17:36.460 に答える
0

open呼び出しは、int型の指定されたファイルへのHANDLE返します。したがって、int型のHANDLEを宣言してopenから収集するだけです。そう、

int FileDesc ;
FileDesc = open( argv[1], O_RDWRD ) ;
// Check for Errors here
于 2012-09-21T06:11:11.360 に答える