我想遍历 argv 并将相关信息(从索引 2 开始(复制到一个 2D 字符数组中
,如下所示。typedef struct
{
char *source;
char **dict;
unsigned int size_of_dict;
} t_char_cluster;
。
int main(int argc, char** argv)){
t_char_cluster data;
data.dict = malloc(argc - 2);
data.source = argv[1];
data.size_of_dict = 0;
for (unsigned i = 2; i < argc; i++) {
data.dict[i - 2] = malloc(strlen(argv[i]));
strcpy(data.dict[i - 2], argv[i]);
data.size_of_dict++;
printf(" dict[0] at i = %d : %s n", i, data.dict[0]);
}
}
这在第四次迭代之前一直完美运行(i 从 2 开始(。之后,char 数组中的第一个字符串(索引 0(被损坏。因此,printf 语句的输出如下所示:
dict[0] at i = 2 : foo
dict[0] at i = 3 : foo
dict[0] at i = 4 : foo
dict[0] at i = 5 : foo
dict[0] at i = 6 : P�Te�U
...
dict[1] at i = 15 : P�Te�U
正如我通过调试发现的那样,在第 4 次迭代的malloc()
调用之后,dict[0]
已损坏。
您的分配data.dict = malloc(argc - 2)
不正确。由于您要创建一个(argc-2)
char*
数组,因此您应该使用malloc((argc-2)*sizeof(char*));
初始化它。
此外,您的内部分配也不正确,您应该使用data.dict[i - 2] = malloc(strlen(argv[i])+1);
提供一个额外的元素来存储最终