arrays - 即使使用正确的分隔符,strtok 也不能正确分割空格
问题描述
我正在尝试拆分两个单词(以及更多)并将它们放入一个数组中,方法是使用 strtok 将其拆分为标记。我的分隔符包括" \t\n";
如下代码所示。例如,如果我要输入"cat program.c"
,它只会打印cat
令牌而不是program.c
令牌,我不知道为什么。我的分隔符不正确还是我没有正确拆分字符串?这是代码
char b[256];
int k = 0;
char *args[4];
char *tokens;
char delimiters[] = " \t\n";
printf("Please enter the command you want to use:\n");
scanf("%255s", b);
tokens = strtok(b, delimiters);
while (tokens != NULL){
args[k++] = tokens;
printf("%s\n",tokens);
tokens = strtok(NULL, delimiters);
}
解决方案
问题不在于strtok()
,而在于scanf()
。%s
字段指令扫描以空格分隔的字符串,因此当输入为 时cat program.c
,只有“猫”才会b
首先将其放入数组中。( program.c
剩余部分等待阅读。)如果您想一次阅读一整行输入,那么我建议您fgets()
改为使用 。
推荐阅读
- multithreading - 如何从异常处理程序中产生线程的当前延续
- python - 如何使 Tkinter python 脚本每 X 秒取一次变量?
- vba - 如何在 VBA 的分页符处将我的一个文档拆分为多个文档?
- azure - Azure Function v2 TypeLoadException ExecutionContext
- javascript - 通过javascript验证表单
- ios - 手动将 UDID 添加到 Xcode 10?
- c - C忽略结构前面的const限定符
- javascript - 从 Blob URL 下载 PDF
- java - Java 静态方法、通配符/通用返回类型
- python-3.x - 以管理员身份运行的 Visual Studio 代码不会运行代码