gpt4 book ai didi

c - my_shell 程序中的字符串错误

转载 作者:太空宇宙 更新时间:2023-11-04 01:52:56 24 4
gpt4 key购买 nike

我正在尝试创建一个简单的 shell 程序来执行输入中指定的程序。有两个主要功能:scanner()(使用strtok将输入拆分为token)和execute()(fork进程并执行程序)。

不幸的是,它不起作用...我尝试在 scanner() 的末尾和 的开头打印 string[0] >执行()。第一次输出是正确的,但第二次 string[] 似乎在随机数序列中被修改,所以 execvp() 不起作用...

我真的不明白为什么 string[] 的值会改变,可能是一个非常愚蠢的错误,但我看不到。我真的需要你的帮助!感谢您的建议。

#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>

#define DIM 256

int scanner(char*[]);
int execute(char*[]);

int main()
{
char* string[DIM];

scanner(string);
execute(string);

}

/* scan: read the input in token*/
int scanner(char* string[])
{
char input[1024];
char delimit[]=" \t\r\n\v\f";
int i = 0;

if(fgets(input, sizeof input, stdin)) {
string[i] = strtok(input, delimit);
while(string[i]!=NULL){
i++;
string[i]=strtok(NULL,delimit);
}
return 0;
}
return 1;
}
/* execute: execute the command*/
int execute(char* string[])
{
int pid;
printf("%s\n", string[0]);
switch(pid = fork()){
case -1:
return 1;
case 0:
execvp(string[0], string);
return 1;
default:
wait((int*)0);
return 0;
}
}

最佳答案

scanner中的字符串变量input是一个局部变量,存储类为“auto”。这意味着当那个函数返回时,那个变量消失了,它占用的内存可以重新用于其他事情。这很不幸,因为 strtok 返回指向该字符串变量的指针

关于c - my_shell 程序中的字符串错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40043393/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com