youngyangyang04/KamaOS

Lab1-xargs

Opened this issue · 1 comments

// 使用指针 p 遍历缓冲区,遇到空格或换行符时,将其替换为字符串结束符 \0
        if (*p == ' ' || *p == '\n') {
			
            *p = '\0';

            // 将参数添加到参数缓冲区 argsbuf 中
            *(pa++) = last_p;
			last_p = p+1;

            // 每当遇到换行符 \n 时,表示一组参数读取完毕,调用 run 函数执行程序,传递参数
            if (*p == '\n') {
				
				*pa = 0; 
				run(argv[1], argsbuf); 
				pa = args; 
			}
        }

在该代码段中,*p被提前赋值 ‘\0’ if (*p == '\n')模块无法进入,所以对于多行的参数不能正确实现。我做了以下修改

// 使用指针 p 遍历缓冲区,遇到空格或换行符时,将其替换为字符串结束符 \0
        if (*p == ' ' || *p == '\n') {
            if(*p == ' '){
                  *p = '\0';
            }

            // 将参数添加到参数缓冲区 argsbuf 中
            *(pa++) = last_p;
			last_p = p+1;

            // 每当遇到换行符 \n 时,表示一组参数读取完毕,调用 run 函数执行程序,传递参数
            if (*p == '\n') {
				
				*pa = 0; 
				run(argv[1], argsbuf); 
				pa = args; 
			}
        }

感谢提醒!我去检查检查