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