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

实现带管道的简易Shell:管道符号统计失败的问题排查

解决Shell管道统计中无法识别"|"符号的问题

核心错误原因

C语言中不能用==直接比较字符串内容,==比较的是两个字符串指针的内存地址,而非字符串本身的内容。你写的args[i]== "\0|\0"和args[i]=="|",本质是在对比args[i](解析后的token地址)与常量区字面量字符串的地址,两者地址不同,导致条件永远不成立,num_pipes自然无法递增。

正确的判断方式

使用C标准库的strcmp()函数比较字符串内容:

  • strcmp(a, b)返回0时,表示两个字符串完全相等
  • 你的parse_args()已经将管道符作为独立token存入args数组,每个管道符token就是单独的字符串"|"(自动以\0结尾),无需考虑"\0|\0"这种形式

修改后的代码片段

// 记得在代码开头包含string.h头文件,否则strcmp会报错
#include <string.h>

#ifdef step1 /*Detect pipe symbol in args*/
        printf("Printing the args returned from parse_args:\n");
        for(int i = 0; i < ARR_SIZE && args[i]!= NULL; i++){
            printf("args[%d]: %s\n",i, args[i]);
            // 用strcmp判断是否为管道符
            if(strcmp(args[i], "|") == 0){
                num_pipes++;
            }
        }
        printf("There are %d pipes in the buffer.\n",num_pipes);
#endif

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 09:39:22