【发布时间】:2017-10-11 04:19:46
【问题描述】:
假设我从标准输入(一行)得到一个字符串。使用该行,我想从中创建一个字符串数组:
char ** array_of_strings
我希望这个字符串数组是该行的数字。例如,如果行输入是这样的:
"aasd1asdf4j 8 98"
数组看起来像这样:
["1", "4", "8", "98"]
首先,我将如何构建数组?我的想法是使用isdigit() 来检查数字何时开始,并指向那里。然后,当数字完成时,我会将第一个非数字字符的字符值更改为'\0'。我将在我从行输入中获得的整个字符串中继续这个过程。但是,由于 array_of_strings 未初始化,我如何才能在不创建段错误的情况下将这些指针实际添加到我的 array_of_strings 中?
这是否可以在不为 array_of_strings 分配任何额外内存的情况下完成?我觉得它可以,因为 array_of_strings 只是保存指向已经加载到内存中的字符串的指针。
我知道这不是一个代码编写服务,但是否可以提供一些关于我如何构建这样一个东西的例子?这在理论上对我来说是有意义的,但我什至不知道如何开始实施它。我上面提供的描述是我目前最接近的代码。
array_of_strings 创建后,是不是就不能使用数组语法来访问它的值(每个都是char * 类型)?点赞:array_of_strings[0]
【问题讨论】:
-
如果事先不知道数组大小,可以选择使用
realloc。如果您知道数组大小的上限,则可以使用它。如果您可以扫描输入,计算位数(无需提取和存储它们),您可以使用普通的malloc/calloc而不是realloc。 -
@Evert 为什么我必须首先分配额外的内存,考虑到将成为数组的字符串(行)已经存在?
-
您仍然需要一个(动态分配的)char 指针数组来指向每个子字符串的开头吗?您还如何跟踪每个数字字符串的开头?
-
"我上面提供的描述是我目前拥有的最接近代码的描述。":也许值得尝试使用各种方法将其放入实际代码中。尽管在这里,我怀疑您能否成功:指向 char 指针(又名字符串)的指针只能容纳一 (1) 个字符串;因此需要动态分配。
-
@Evert 我现在明白了。对不起,我不是想和你争论,我只是不知道为什么。
标签: c arrays string pointers segmentation-fault