【发布时间】:2014-09-27 18:26:54
【问题描述】:
我基本上想从标准输入中获取单行输入,获取“字符串”(由空格分隔的字符数组),然后将每个“字符串”放入 char[] 数组中。我已经尝试过使用 fgets、getline 和 strtok;我不想使用外部库或 Unix 不可用的任何东西。我在这里看到了很多类似的问题,所以很抱歉,如果这个问题已经得到解答,但我找不到一个简单直接的方法来做到这一点。
谢谢,如果我的表述有误,我深表歉意,我非常不习惯 C。
编辑:好的,这是我最近尝试过的:
#include <string.h>
#include <stdio.h>
int main() {
const char str[80] = "This is a | test";
const char s[2] = " ";
char *token;
char arguments[10][50];
int i = 0;
/* get the first token */
token = strtok(str, s);
/* walk through other tokens */
while( token != NULL )
{
printf( " %s\n", token );
arguments[i] = token;
i++;
token = strtok(NULL, s);
}
return(0);
}
编辑:感谢 Paul,对于任何与我有同样问题的人,我通过更改以下行来让它工作:
arguments[i] = token;
到:
strcpy(arguments[i], token);
【问题讨论】:
-
显示您尝试过的内容以及失败的原因。
fgets()和strtok()或手动解析的组合是执行此操作的正常方式,因此,如果这对您不起作用,那么您应该这样做,而不是寻找其他方式。跨度> -
arguments[i] = token;- 你不能分配给这样的数组,你需要使用strcpy()。strtok()也会修改你传递给它的字符串,所以你不应该让它成为const。这都是非常基础的,我认为你需要多花一点时间学习 C,然后再在 Stack Overflow 上提问。 -
我认为
argv(int main(int argc, char * * argv);)可能正是您所需要的。请注意,设计程序以获取其参数作为命令行参数通常比交互式查询用户更好。不幸的是,后者是大多数书籍和课程教给你的。