Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从另一个函数中检索数组值_C_Linux - Fatal编程技术网

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

C 从另一个函数中检索数组值,c,linux,C,Linux,我想得到数组a,b,c,j中的所有数据 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

我想得到数组a,b,c,j中的所有数据

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);
    }
}
void getData(int argc,char**argv)
{
int n;
INTA[10];
int b[10];
字符c[10][10];
...
.....
long j[10];
检索数据(“文件名1”);
对于(n=0;n<10;++n){
printf(“%d\n”,a[n]);
}
对于(n=0;n<10;++n){
printf(“%d\n”,b[n]);
}
……更多代码
检索数据(“文件名2”);
对于(n=0;n<10;++n){
printf(“%d\n”,a[n]);
}
对于(n=0;n<10;++n){
printf(“%d\n”,b[n]);
}
……更多代码
}
filename1和filename2包含相同的数据结构,但值不同。 请有人告诉我怎么。。。 我是在LinuxC下编译的。
对不起,我的英语很差。

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

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

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

}
请使用更好的名称:)

或者,因为在您的例子中,一个函数调用另一个函数,所以您可以将数组作为指针作为参数传递给函数,但对于2D指针来说,这至少是一件痛苦的事情

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

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

您还可以将这些字段打包到
结构中,并将该
结构的地址作为参数传递。@BasileStarynkevitch非常正确!感谢巴兹尔和卡提克的建议。你能给我看一个使用struct的例子吗?或者如果你能重新编辑我的代码。我还在学习。@user1996004请看我的答案,看一个简单的例子。非常感谢Karthik。你的解决方案如我所愿。
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;
    ....
}