从另一个函数中检索数组值

时间:2013-01-21 04:47:23

标签: c linux

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下编译。 抱歉我的英语很差。

1 个答案:

答案 0 :(得分:1)

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

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

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

请使用更好的名字:)

或者,因为在你的情况下,一个函数调用另一个函数,你可以将数组作为参数传递给函数的参数,但是至少在2D指针的情况下这将是痛苦的。

第三个,语法上更简单的选项是将3个数组包装在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;
    ....
}