使用strcpy进行分段错误(核心转储)

时间:2018-03-08 19:23:31

标签: c

我遇到了#34;分段错误(核心转储)"在* nix中编译我的C程序时。我把错误缩小到了这一行(没有这行我的程序可以运行):

strcpy(con[count], "1234");

在此之前,我将con声明为:

char *con[30];

计数总是小于30。

这条线有什么问题?我该怎么改变它?

1 个答案:

答案 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;