我遇到了#34;分段错误(核心转储)"在* nix中编译我的C程序时。我把错误缩小到了这一行(没有这行我的程序可以运行):
strcpy(con[count], "1234");
在此之前,我将con声明为:
char *con[30];
计数总是小于30。
这条线有什么问题?我该怎么改变它?
答案 0 :(得分:2)
char *con[30];
声明一个包含30个字符串指针的数组。这不是你需要的。它失败了,因为你然后尝试复制到第一个字符串,但没有分配第一个字符串(只有指向它的指针)
你需要
char con[30];
然后
strcpy(con, "1234");
或者(正如Lee Danial指出的那样)你可能想要一个数组,在这种情况下你需要
char *con[30];
然后
con[count] = strdup("1234")
或
con[count] = "1234"
第一个分配字符串并为您复制(malloc和strcpy的组合)。第二个只是指向提供的文字,它不会复制。很难说哪个对你来说是“最好的”。
PS strdup相当于
x = malloc(strlen(str) + 1);
strcpy(x, str);
return x;