C 字符数组中的信息丢失



我想遍历 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);提供一个额外的元素来存储最终

下次,您可以使用诸如valgrind.

编辑:正如Jabberwocky所指出的,您的主原型也不正确,您应该改用int main(int argc, char** argv)

相关内容

  • 没有找到相关文章

最新更新