【发布时间】:2018-09-26 20:38:08
【问题描述】:
我正在尝试创建一个程序,该程序使用通过终端传递的参数填充固定大小的参数数组。我的第一步是尝试创建和填充默认参数字符串数组,我已经成功地做到了。但是,我现在尝试使用malloc() 为该数组分配空间,但无法编译。我已经尝试了所有我能想到的关于正确语法的方法。我已经尝试对malloc() 以及如何将其用于二维数组进行更多研究,但我没有找到任何对我有帮助的信息。我被困住了,不知道下一步该怎么做。代码如下:
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#define MAX_NUM_OF_ARGS 5
#define MAX_ARG_SIZE 256
int main(int argc, char **argv) {
printf("%s%d\n", "Length: ", argc); //for debug purposes
// Make sure we don't have more than five arguments
if(argc > MAX_NUM_OF_ARGS) {
printf("%s", "Too many arguments. Must enter fewer than 4.");
}
// Populate the array
else{
char defaultArgs[] = "defaultArgs"; //create default argument array
//allocate memory for default array
char argumentArray[MAX_NUM_OF_ARGS][MAX_ARG_SIZE] =
(char *)malloc(MAX_NUM_OF_ARGS * MAX_ARG_SIZE * sizeof(char));
//populate array with default arguments
for (int i = 0; i < MAX_NUM_OF_ARGS; i++) {
strcpy(argumentArray[i], defaultArgs);
printf("%s\n", argumentArray[i]);
}
free(argumentArray);
return 0;
}
}
当我尝试编译时,在 malloc() 的 (char*) 转换中出现无效的初始化程序错误。我尝试将其转换为 (char**) 和 (char) 并将 sizeof(char) 更改为 sizeof(char*) 和 sizeof(char**)。
我现在不确定自己做错了什么,甚至不知道下一步该尝试什么。
【问题讨论】:
-
char **argv在main()中声明,但在代码中未使用。这是你的意图吗? -
@chux 稍后将用于使用来自终端的参数填充数组。我还没走到那一步。
-
布莱克·西蒙斯,现在考虑that 仍然有用,如果
strlen(argv[i]) >= MAX_ARG_SIZE会发生什么?
标签: c arrays string pointers malloc