Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C-在不重新分配内存的情况下将C字符串拆分为单词_C_Arrays_String - Fatal编程技术网

C-在不重新分配内存的情况下将C字符串拆分为单词

C-在不重新分配内存的情况下将C字符串拆分为单词,c,arrays,string,C,Arrays,String,我试图将字符串(constchar*)拆分为单词,并将单个单词保存在一个字符指针数组(char**)中 我的问题不是拆分部分,而是不允许分配任何内存。我需要使用输入字符串作为内存,但由于它是常量字符,我无法修改它 我的想法是将所有空格改为“\0”,并保存数组中单词开头的位置,这当然是不可能的,因为输入字符串是const 函数的声明如下所示: 函数返回行中的字数,maxWords是单词数组的大小 我发现的所有东西要么使用数组作为输入字符串,要么使用malloc分配内存 所提出的问题没有解决方案。

我试图将字符串(constchar*)拆分为单词,并将单个单词保存在一个字符指针数组(char**)中

我的问题不是拆分部分,而是不允许分配任何内存。我需要使用输入字符串作为内存,但由于它是常量字符,我无法修改它

我的想法是将所有空格改为“\0”,并保存数组中单词开头的位置,这当然是不可能的,因为输入字符串是const

函数的声明如下所示:

函数返回中的字数,maxWords是单词数组的大小


我发现的所有东西要么使用数组作为输入字符串,要么使用malloc分配内存

所提出的问题没有解决方案。您可以获取指向每个单词开头的指针,但为了使用源字符串作为单独单词字符串的存储,必须通过使用字符串终止符替换分隔符来修改它,就像您考虑的那样

如果任务确实假设您将更改输入行以将其用于存储多个单独的字符串,那么函数的
参数被限定为
常量
-似乎本质上是不正确的。此类资格与该职能部门应执行的工作不一致。此外,如果要将指针分配到由
指向的字符串中,并将其分配到
单词
,那么
单词
不符合
常量
的事实也会产生冲突


对于所描述的问题,我看到的唯一可行的解决方案是从
参数中删除
常量
限定符。

所提出的问题没有解决方案。您可以获取指向每个单词开头的指针,但为了使用源字符串作为单独单词字符串的存储,必须通过使用字符串终止符替换分隔符来修改它,就像您考虑的那样

如果任务确实假设您将更改输入行以将其用于存储多个单独的字符串,那么函数的
参数被限定为
常量
-似乎本质上是不正确的。此类资格与该职能部门应执行的工作不一致。此外,如果要将指针分配到由
指向的字符串中,并将其分配到
单词
,那么
单词
不符合
常量
的事实也会产生冲突


对于所描述的问题,我看到的唯一可行的解决方案是从
参数中删除
常量
限定符。

您可以保存一对表示单词的索引/指针。当然可以,@vittoriomeo,但这并不能得到包含单个单词的C字符串。
但这不能得到C字符串。
没有
C字符串
,只有字符数组(当然除了字符串文本)。
字符指针数组(char**)。
==>
char**
不是数组,也不是字符指针数组。这只是指向char的指针。@JohnBollinger这就是我的观点。这不是一个学习系统,我认为人们应该遵守标准。你可以保存一对表示单词的索引/指针。当然可以,@VittorioRomeo,但这不能得到包含单个单词的C字符串。
但这不能得到C字符串
没有
C字符串
,只有字符数组(当然除了字符串文字)。
字符指针数组(char**)。
==>
char**
不是数组,也不是字符指针数组。这只是指向char的指针。@JohnBollinger这就是我的观点。这里是这样的,而不是一个学习系统,我认为人们应该坚持这个标准。如果我删除
const
修饰符,我会不会仍然有同样的问题,因为每当我使用引号时,我都可以用自动生成的const char*调用函数?@Treborium,我解释了“拆分字符串[…]转换为单词”和“保存单个单词”,因为需要生成每个单词的C字符串(以空结尾的字符序列,Michi),正如您介绍的实现思想所支持的那样。在这种情况下,正如我所说,这个问题的制约因素使其难以解决。因此,是的,删除
常量将问题变成另一个问题。特别是,它把它变成了一个可解的问题。您是对的,生成的函数在字符串文本上使用是不安全的。如果我删除
const
修饰符,我是否仍然会有同样的问题,因为每当我使用引号时,我都可以使用自动生成的const char*调用函数?@Treborium,我解释了“拆分字符串[…]转换为单词”和“保存单个单词”,因为需要生成每个单词的C字符串(以空结尾的字符序列,Michi),正如您介绍的实现思想所支持的那样。在这种情况下,正如我所说,这个问题的制约因素使其难以解决。因此,是的,删除
常量将问题变成另一个问题。特别是,它把它变成了一个可解的问题。如果您是正确的,那么在字符串文本上使用结果函数是不安全的。
int breakIntoWords(const char *line, int maxWords, char** words);