在C语言中使用strcpy函数与字符串数组

6
我有一个字符数组,定义如下:char *c[20];。我试图执行以下操作:strcpy(c[k], "undefined");但是它不起作用。
我还尝试将其定义为char c[20][70],但没有成功。
编辑:实际上我知道它是一个字符数组的数组,我需要这样。

如果您使用 c[20][70] 然后执行 strcpy(&c[k][0], "undefined"); 会发生什么? - aroth
1
抱歉,但“我确实知道它是字符数组的数组,我需要它就是这样”的说法毫无意义。如果您想要将一个字符串复制到某个地方,那么“某个地方”必须是一个字符数组。不是字符数组的数组,而是一个字符数组。在这种情况下,您不能“需要它就是这样”。 - AnT stands with Russia
普遍的问题:它为什么不工作? - Keith Thompson
2个回答

9

这不是一个字符数组,而是一个字符指针的数组。删除 * 将其变为字符数组:

char c[20];

然后您可以使用 strcpy:

strcpy(c, "undefined");

如果您确实需要一个字符数组的数组,您必须执行您所说过的尝试:

// array that holds 20 arrays that can hold up to 70 chars each
char c[20][70];

// copy "undefined" into the third element
strcpy(c[2], "undefined");

问题可能是你缺少了闭合的",不过我不知道是否是复制粘贴的错误。或者问题可能是你在使用k之前没有定义它,如果没有看到你得到的错误消息,我们就不知道。如果你想将它们全部设置为该字符串,那么只需循环遍历它们即可。
char c[20][70];

int i;
for (i = 0; i < 20; ++i)
    strcpy(c[i], "undefined");

1
我认为他可能想要一个字符串数组,并且能够复制到数组中的任何一个字符串。 - aroth

3
如果你想要得到20个每个包含70个字符的字符串,那么第二个选项应该可行:
char c[20][70];
for (int k = 0; k < 20; k++)
    strcpy(c[k], "undefined");

char *c[20]这个定义是不正确的,因为你只是在定义一个长度为20的指针数组,并且这些指针没有被初始化。你可以按照下面的方式来使其工作:

char *c[20];
for (int k = 0; k < 20; k++) {
    c[k] = malloc(70);
    strcpy(c[k], "undefined");
}

// then when you are done with these strings
for (int k = 0; k < 20; k++)
    free(c[k]);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接