C语言中二维数组中变量放置方法

vc9ivgsu  于 2023-01-08  发布在  其他
关注(0)|答案(1)|浏览(164)

我想在二维数组上decalre,但我想在声明中放入一个vrailbe

#define MAX_SIZE 512
char* FWdir;
int main()
{
 getFwDIR(FWdir);  //--> put In FWdir path example: /opt/fw1
 char arr [][MAX_SIZE] = {
 FWdir,"-t","arg"
};

}

我尝试在arr上迭代,但没有得到/opt/fw 1,而是得到了一个地址
我暴露了
如果我刊登逮捕令我会得到
/opt/fw 1-t参数...欧洲工商管理学院我得到了“一些输出”-t参数

uyhoqukh

uyhoqukh1#

这里有两个问题。
第一种情况是,你将指针FWdir传递给getFwDIR(),但是FWdir为NULL,所以getFwDIR()没有地方存储路径,在getFwDIR(char *)的当前公式中,该函数也不能为路径动态分配内存。
第二个问题是,您试图将字符串FWdir的内容直接写入数组arr,但这不是字符串在C中的工作方式。
关于第一点,你有两个明显的选择:
1.重写getFwDIR()以接受指向指针getFwDIR(char **)的指针,并为该函数中的路径动态分配空间:

int getFwDIR(char **p_path)
{
  ...
  *p_path = malloc(MAXIMUM_PATH_LENGTH + 1);
  ... // Proceed to get the path
}

...
int main(void)
{
  getFwDIR(&FWdir);  //--> put In FWdir path example: /opt/fw1
...
}

但是,这确实留下了稍后释放内存的问题。
1.将FWdir设为定长字符串,并传递给getFwDIR()

#define MAX_SIZE 512
char FWdir[MAX_SIZE];

由于您已经在arr中有效地将路径长度限制为511个字符,所以我会选择第二个选项,它更容易也更安全。
关于第二点,你还有两个明确的选择:
1.首先声明2d数组,并将第一个元素传递给getFwDIR()

char arr [][MAX_SIZE] =
 {
   "","-t","arg"
 };
 getFwDIR(arr[0]);  //--> put In FWdir path example: /opt/fw1

在这个示例中,您不需要FWdir
1.初始化 * 后 * 将FWdir复制到数组中:

char FWdir[MAX_SIZE];
 getFwDIR(FWdir);  //--> put In FWdir path example: /opt/fw1
 char arr [][MAX_SIZE] =
 {
   "","-t","arg"
 };
 strncpy(arr[0], FWdir, sizeof(arr[0]));

相关问题