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

如何移除strtok最后一次返回结果中的'\n'?手动尝试未成功

解决strtok最后一个token末尾'\n'无法移除的问题

你的问题出在strtok的分隔符仅设置了空格,而输入字符串末尾的\n不属于分隔符范畴,会被完整保留在最后一个token里。直接定位到最后一个token并修改即可解决,以下是调整后的代码:

int parseCommand(char *inputCommand, struct Command *command){
    int i = 0;
    char *token;
    
    token = strtok(inputCommand, " ");

    while(token != NULL){
        command->argv[i] = token; 
        token = strtok(NULL, " ");
        i++;
    }
    
    command->argc = i;
    command->commandName = command->argv[0];

    // 移除最后一个参数末尾的换行符
    if (command->argc > 0) {
        char *lastArg = command->argv[command->argc - 1];
        // 方法1:用strchr查找换行符并替换为字符串结束符
        char *newline = strchr(lastArg, '\n');
        if (newline != NULL) {
            *newline = '\0';
        }

        // 或者用方法2:直接检查最后一个字符
        // size_t len = strlen(lastArg);
        // if (len > 0 && lastArg[len - 1] == '\n') {
        //     lastArg[len - 1] = '\0';
        // }
    }

    /*-----------FOR DEBUG-----------*/
    /*
    printf("%s : est le nom de la commande\n", command->commandName);
    
    for(int j = 0; j<i; j++){
        printf("command->argv[%i] %s\n",j, command->argv[j]);
    }
    */ 
    // 补充返回值,避免编译警告
    return command->argc;
}

关键说明:

  • 先判断command->argc > 0,避免无token时数组访问越界
  • 两种处理方式二选一:strchr能定位到任意位置的\n,适合换行符可能出现在token中间的场景;直接检查最后一个字符则更高效,适合确认换行符在末尾的情况
  • 原函数缺少返回语句,补充后可消除编译警告

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 09:10:37