【发布时间】:2011-07-06 13:56:55
【问题描述】:
如果我欺骗了主题,我真的很抱歉,我在这里搜索它没有结果。 我有代码
void split(char* str, char* splitstr)
{
char* p;
char splitbuf[32];
int i=0;
p = strtok(str,",");
while(p!= NULL)
{
printf("%s", p);
sprintf(&splitstr[i],"%s",p);
i++;
p = strtok (NULL, ",");
}
}
如何使用正确的 sprintf 将 strtok 拆分的单词放入字符串数组? 我能以某种方式避免由 strtok 创建的断线吗? 我正在用 ANSI C 编程。我以相同的方式声明了数组 splitstr 和 str 。
char* splitstr;//in main char splitstr[32];
感谢您的帮助。
编辑:
我想做这样的事情: INPUT (它是一个字符串) > "aa,bbb,ccc,ddd" 我声明:char tab[33]; 输出(如果可能,将所有项目保存到字符串数组)> 选项卡 [0] 是“aa” 选项卡 [1] 是“bbb” ... tab[3] 是 "ddd" 但不是 "ddd(newline)"edit2 [18:16]
我忘记添加数据字符串来自文件的读取行。这就是我写“ddd(newline)”的原因。之后我发现新行也由 strtok 显示,但作为另一个项目。顺便说一句,所有答案都很好地考虑了这个问题。几秒钟前我的笔记本电脑坏了(我不知道为什么屏幕变黑了) 一旦我控制了我的电脑,我就会检查代码。 :-)
【问题讨论】:
-
不太确定您要达到的目标。如果你用字符串“a,b,c”调用split,你期望splitstr返回什么?你想创建一个 C 字符串数组 {"a", "b", "c"}?
-
注意数组和指针的区别。 它们不是一回事。
-
strtok是一个有点“难”的函数。例如,如果您想用空格分割字符串"one two three",strtok更改该字符串(它不能是指向文字字符串的指针)到"one#two#three",其中 @987654327 @ 实际上是 NUL 字符 ('\0')。 -
正如下面的 Kevin 所说,如果你想得到一个字符串数组,那么你需要将 splitstr 声明为 char[something][32]。同样正如@pmg 所说,您需要非常小心地理解数组和指针之间的区别。
-
最后一个值后换行的问题是最容易处理的问题。它存在是因为您使用的输入法已将其留在那里(无论该输入法是什么)。如果您不想要它,最好在使用拆分方法之前将其剥离。你得到“ddd(newline)”的原因是因为你从“aa,bbb,ccc,ddd(newline)”开始。strtok 和 sprintf 都没有把它放在那里。顺便说一句,你最好使用 strcpy 而不是 sprintf .
标签: c arrays string split strtok