用字符串动态填充字符数组

Posted

技术标签:

【中文标题】用字符串动态填充字符数组【英文标题】:Populating an array of chars with strings dynamically 【发布时间】:2019-04-11 10:37:02 【问题描述】:

我是 C 新手,我正在尝试将一些字符串存储在 2D 字符数组中。这就是我所拥有的:

char strArray[100][100];
char input[100];
scanf("%s",&input);
strArray[i] = input; //this is where i get the incompatible types assignment error

如评论中所示,我收到incompatible types in assignment 错误。我需要使用char *strArray[100][100] 的数组吗? strArrayinput 不是同一类型(char [])吗?一个是一维的,另一个是二维的,但我只是没有在分配中指定第二维,因为每个字符串都存储在一个新行中。我做错了什么?

【问题讨论】:

scanf("%s",&input); -> scanf("%s",input); , strArray[i] = input; -> strcpy(strArray[i], input); @Osiris 那是一回事,对吧?数组作为指针工作,但 & 工作得太正确了吗? input 衰减为指向char 的指针,而&input 是指向char[100] 的指针。所以不一样,%s 期望指向char 的指针。 哦,我明白了,至于 strcpy() 函数,这是完成这个“程序”的唯一方法吗?也可以用指针来完成吗? 您可以遍历数组并逐个复制它。或者您可以使用memcpy。您不能使用 = 运算符复制数组。 【参考方案1】:

你必须使用strcpy():

#include <stdio.h>
#include <string.h>

int main(void)

    char strArray[100][100];
    char input[100];
    scanf("%s", input);
    strcpy(strArray[0], input);

但从来没有,真的:从来没有!使用scanf()"%s" 而不限制要读取的字符数(字段宽度):

 scanf("%99s", input);

【讨论】:

这是一个很棒的提示,我不知道我可以通过在 scanf 中指定一个介于 % 和 s 之间的数字来限制用户可以输入的字符数。太棒了【参考方案2】:

您可以使用 strcpy() 将输入中的每个字符复制到 strArray[i]。在这种情况下,您将使用

strcpy(strArray[i], input);

【讨论】:

【参考方案3】:

在 C 中,您不能在 char input1[100], input2[100]; input1 = input2 的意义上分配数组。例如,您可以使用strcpy 来复制内容,或者使用memcpy 来复制任意内存块。

所以你必须写strcpy(strArray[i],input),前提是i099之间的整数值。

此外,您必须在 scanf("%s",&amp;input) 中省略 &amp;(即写入 scanf("%s",input)),因为 input 已经衰减为指向 char 的指针。

【讨论】:

以上是关于用字符串动态填充字符数组的主要内容,如果未能解决你的问题,请参考以下文章

extJs - 用字符串数组填充网格面板

用随机名称填充的字符串数组

用 txt 文件中的字符串填充数组 [XCode6 Beta1 的解决方案不再有效]

在从 jQuery 到 JS 的转换中,数组填充了字符串而不是数字

C++如何用new动态开辟一个一维字符数组

如何用字符串填充数组?