0
static void retrieveData(const char* filename)
{
    FILE *f;
    char s[256];
    int a[10];
    int b[10];
    char c[10][10];
    ...
    .....
    long j[10];

    sprintf(s, "some code %s", filename);
    if ((f = popen(s, "r")) != NULL) {
        while (fgets(s, sizeof(s), f)) {
            if (strncmp(s, "A........ {
                sscanf (s,"........
                a[0] = var1;
                b[0] = var2;
                c[0] = var3;
                ...
                .....
            }
            else if (strncmp(s, "B........ {
                sscanf (s,".........
                a[1] = var4;
                b[1] = var5;
                c[1] = var6;
                ...
                .....
            }
            else if .........more codes
        }
        pclose(f);
    }
}

配列a、b、c ....、jのすべてのデータを取得したいと思います。

void getData(int argc, char **argv)
{
    int n;
    int a[10];
    int b[10];
    char c[10][10];
    ...
    .....
    long j[10];

    retrieveData("filename1");

    for (n = 0; n < 10; ++n) {
        printf("%d\n", a[n]);
    }

    for (n = 0; n < 10; ++n) {
        printf("%d\n", b[n]);
    }

    ...... more codes


    retrieveData("filename2");

    for (n = 0; n < 10; ++n) {
        printf("%d\n", a[n]);
    }

    for (n = 0; n < 10; ++n) {
        printf("%d\n", b[n]);
    }

    ...... more codes

}

filename1とfilename2には同じデータ構造が含まれていますが、値が異なります。誰かが私に方法を教えてください...私はLinuxcでコンパイルしています。英語が下手でごめんなさい。

4

1 に答える 1

1

おそらく、それらをローカルではなくグローバル変数として定義する必要があります。そうすれば、任意の関数でそれらにアクセスできます。

.cppこれを両方の関数を含むファイルの先頭に置きます。

int a[10];
int b[10];
char c[10][10];

そして、より良い名前を使用してください:)

あるいは、あなたの場合、一方の関数がもう一方の関数を呼び出すので、関数への引数として配列をポインターとして渡すことができますが、少なくとも2Dポインターの場合はそれは苦痛になります。

3番目の、構文的に単純なオプションは、3つの配列をaでラップし、structその周りにポインターを渡すことstructです。BasileStarynkevitchに感謝します。

typedef struct{
    int a[10];
    int b[10];
    char c[10][10];
} Arrays;

void getData(int argc, char **argv)
{
    ...
    Arrays a;
    retrieveData("...",&a);
    ...
}

void retrieveData(const char* filename, Arrays *a){
    a->b[1] = 1;
    ....
}
于 2013-01-21T04:50:41.053 に答える