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 包含相同的数据结构但不同的值。请有人告诉我如何......我正在linux c下编译。对不起我糟糕的英语。

4

1 回答 1

1

您可能需要将它们定义为全局变量,而不是本地变量,然后您可以在任何函数中访问它们。

.cpp把它放在包含这两个函数的文件的顶部。

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

请使用更好的名称:)

或者,由于在您的情况下,一个函数调用另一个函数,您可以将数组作为指针作为函数的参数传递,但这至少在 2D 指针的情况下会很痛苦。

第三个,语法上更简单的选项是将 3 个数组包装在 a 中struct并传递一个指向它的指针struct,感谢 Basile Starynkevitch。

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 回答