C字符数组的实现

C字符数组的实现,c,arrays,string,string-literals,C,Arrays,String,String Literals,我试图使用getline()函数获取用户输入。我存储输入并用char*指针指向它。 现在我想在空白处拆分字符串,如果有,但我不能更改字符串文字。所以我的想法是将输入的一个副本传输到一个char数组,这样我就可以使用它了。唯一的问题是我还不知道用户输入的大小,所以我无法指定所需数组的大小 如果我想知道如何解决这个问题,我可能会遗漏一些东西,我是Java背景的C新手 非常感谢 您读取该行,计算其大小,然后复制该大小。如果您使用某个函数存储用户输入getline(C标准中没有这样的函数)然后,您可以使

我试图使用getline()函数获取用户输入。我存储输入并用char*指针指向它。 现在我想在空白处拆分字符串,如果有,但我不能更改字符串文字。所以我的想法是将输入的一个副本传输到一个char数组,这样我就可以使用它了。唯一的问题是我还不知道用户输入的大小,所以我无法指定所需数组的大小

如果我想知道如何解决这个问题,我可能会遗漏一些东西,我是Java背景的C新手


非常感谢

您读取该行,计算其大小,然后复制该大小。

如果您使用某个函数存储用户输入
getline
(C标准中没有这样的函数)然后,您可以使用header
中声明的标准C函数
strtok
将其拆分为令牌。如果您不想更改原始字符串,那么您可以通过搜索字符串中的空白字符和非空白字符来自己编写所需的函数。

也许可以正确使用
malloc
!从何处获取用于存储初始用户输入的
char*
?不要复制字符串(这不会使您更接近解决方案),而是使用
(From,to)
索引对数组来分隔单词。您必须至少分配
strlen(input)/2个
这样的对。另一种方法是动态处理单词,而不保留跟踪。@James Loper用户不能输入字符串文字。:)字符串文字是程序源代码的一部分。非常感谢。。。很明显,我对常量字符数组和非常量字符数组之间的区别感到困惑。。。再次感谢@vladfromscow“Some function
getline
”,考虑到问题的措辞,我认为可以公平地假设它不仅仅是具有该名称的函数,而是通用的标准函数(POSIX.1-2008)
getline
,即使问题没有用posix标记标记。@海德可能会,但在任何情况下,它要么自己分配内存,要么使用用户提供的参数来存储ibput。