You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置正确分隔符时strtok仍无法按空格拆分字符串是什么原因

问题根因

你的代码问题出在输入读取环节,和strtok的拆分逻辑、分隔符设置均无关:

scanf("%255s", b) 使用%s格式符读取字符串时,默认以所有空白符(空格、制表符、换行符等)作为读取终止标记。你输入cat program.c时,只有第一个空白符前的cat被写入数组b,后面的program.c根本没有被读入缓冲区,自然无法拆分出第二个令牌。


修复方案

将输入读取语句替换为fgets即可读取包含空格的整行输入:

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为fgets,读取整行输入
fgets(b, sizeof(b), stdin);
tokens = strtok(b, delimiters);
// 加边界判断避免args数组越界,预留最后一位可存NULL
while (tokens != NULL && k < 3) {
  args[k++] = tokens;
  printf("%s\n",tokens);
  tokens = strtok(NULL, delimiters);
}
args[k] = NULL; // 可选:如果args要作为exec类函数的参数,末尾补NULL是规范用法

注:fgets会将输入末尾的换行符一并读入缓冲区,你的分隔符已经包含\n,不需要额外做换行符清除处理。


内容的提问来源于stack exchange,提问作者Raz0rmaddnes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 23:54:03