这是我得到的:
char ***tokens;
*tokens=(char**)malloc((5)*sizeof(char*));
*tokens[4]=(char*)malloc((4)*sizeof(char));
我得到了#34;程序收到信号SIGSEGV,分段错误。"在第三行。
问题是,这没关系:
*tokens[0]=(char*)malloc((4)*sizeof(char));
这也没关系:
*tokens[1]=(char*)malloc((4)*sizeof(char));
但这给了我分段错误:
*tokens[2]=(char*)malloc((4)*sizeof(char));
或任何大于2的数字,为什么数组的长度应为5?
我的想法是我有一个指向数组的指针,每个数组都指向一个字符串,所以我可以这样做:
*tokens[0]="string";
和
(*tokens[0])[m]='s';
答案 0 :(得分:2)
你想要做什么?似乎char **tokens
可以更好地解决您的问题。
在这一刻,当你做的时候
*tokens=(char**)malloc((5)*sizeof(char*));
您正在写入未初始化的变量标记指向的未分配的内存区域。如果它之后崩溃,那么它或多或少是随机的。
我的想法是我有一个指向数组的指针,每组都有 数组指向一个字符串,所以我可以这样做:
*tokens[0]="string";
您认为该变量指向的内存区域是什么?
我建议你阅读Pointer to const string in C,这解释了为什么(*tokens[0])[m]='s';
是非法的。
您还应该了解strcpy
之类的命令。