用字符串动态填充字符数组
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]
的数组吗? strArray
和 input
不是同一类型(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)
,前提是i
是0
和99
之间的整数值。
此外,您必须在 scanf("%s",&input)
中省略 &
(即写入 scanf("%s",input)
),因为 input
已经衰减为指向 char 的指针。
【讨论】:
以上是关于用字符串动态填充字符数组的主要内容,如果未能解决你的问题,请参考以下文章
用 txt 文件中的字符串填充数组 [XCode6 Beta1 的解决方案不再有效]