在 C 中将 strcpy 与字符串数组一起使用

Posted

技术标签:

【中文标题】在 C 中将 strcpy 与字符串数组一起使用【英文标题】:Using strcpy with a string array in C 【发布时间】:2011-11-07 06:07:54 【问题描述】:

我有一个如下定义的字符数组:char *c[20]; 我正在尝试这样做:strcpy(c[k], "undefined); 但它不起作用

我也尝试将其定义为char c[20][70],但没有成功。

编辑:我实际上知道它是一个字符数组,我需要它。

【问题讨论】:

如果你使用c[20][70]然后使用strcpy(&c[k][0], "undefined");呢? 对不起,但是“我实际上知道它是一个字符数组的数组,我需要它”只是没有任何意义。如果你想在某处复制一个字符串,那么“某处”必须是一个字符数组。不是字符数组的数组,而是字符数组。在这种情况下,您不会“需要那样”。 普遍的问题:它怎么不起作用? 【参考方案1】:

那不是字符数组;那是一个字符指针数组。删除* 使其成为字符数组:

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");

【讨论】:

我想也许他想要一个字符串数组,并且能够复制到数组中的任何字符串中。【参考方案2】:

如果您想要的是 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]);

【讨论】:

以上是关于在 C 中将 strcpy 与字符串数组一起使用的主要内容,如果未能解决你的问题,请参考以下文章

无法在C中使用strcpy从指针数组复制字符串? [复制]

string = 与strcpy的区别 c_str()

memcpy和strcpy的区别

字符和字符串函数的这些知识你知道吗?超硬核3w字文章带你领略C语言字符与字符串的美!!!

c语言中的strcpy啥意思,简单点解释

C语言strcpy()函数,字符数组复制