如何替换C中的字符*?
我目前正在编写一个用于学校目的的shell,我有一个问题,即如果我编写命令“history”,那么之后的“exit”命令将不起作用。如果你能帮助我,我将非常高兴。 这是我的密码:如何替换C中的字符*?,c,C,我目前正在编写一个用于学校目的的shell,我有一个问题,即如果我编写命令“history”,那么之后的“exit”命令将不起作用。如果你能帮助我,我将非常高兴。 这是我的密码: #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <signal.h> #define MAX_INPUT 256 static
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#define MAX_INPUT 256
static char cwd[100];
void myprintf(char *text) {
text != NULL ?
printf("%s@rash:%s: %s\n", getenv("USER"), getcwd(cwd, sizeof(cwd)), text) :
printf("%s@rash:%s: ", getenv("USER"), getcwd(cwd, sizeof(cwd)));
}
void errprintf(char *text) {
myprintf(NULL);
printf("Couldn't run %s\n", text);
}
static char *argv[256];
static int argc;
static int pid = 0;
FILE *fhistory;
void parseInput(char *input) {
input = strtok(input, "\n");
for (argc = 0; argc < MAX_INPUT; argc++) {
argv[argc] = NULL;
}
argc = 0;
fprintf(fhistory, "%s\n", input);
char *param = strtok(input, " ");
while (param) {
argv[argc++] = param;
param = strtok(NULL, " ");
}
}
void signalHandler(int sign) {
switch (sign) {
case SIGINT: {
if (pid != 0) {
kill(pid, SIGKILL);
pid = 0;
}
break;
}
case SIGCHLD: {
if (pid != 0) {
kill(pid, SIGKILL);
pid = 0;
}
break;
}
}
}
int programs() {
if (!strcmp(argv[0], "exit")) {
return -1;
}
if (!strcmp(argv[0], "cd")) {
chdir(argv[1] == NULL ? getenv("HOME") : argv[1]);
} else {
pid = fork();
switch (pid) {
case -1: {
myprintf("Erectile Dysfunction!");
break;
}
case 0: {
if (!strcmp(argv[0], "history")) {
system("cat .rash_history.txt");
} else {
execvp(argv[0], argv);
errprintf(argv[0]);
}
break;
}
default: {
waitpid(pid, NULL, 0);
signal(SIGCHLD, signalHandler);
return 0;
}
}
}
return 1;
}
int main(void) {
signal(SIGINT, signalHandler);
char *input = NULL;
myprintf("Welcome to rash!");
fhistory = fopen(".rash_history.txt", "a");
while (input != NULL ? strncmp(input, "exit", strlen(input)) != 0 : 1) {
myprintf(NULL);
input = (char *) malloc(sizeof(char *) * MAX_INPUT);
int j;
for (j = 0; j < MAX_INPUT; j++) {
input[j] = '\0';
}
fgets(input, MAX_INPUT, stdin);
parseInput(input);
if (*(input) != '\n') {
programs();
}
}
fclose(fhistory);
return 0;
}
#包括
#包括
#包括
#包括
#包括
#定义最大输入256
静态字符cwd[100];
void myprintf(字符*文本){
文本!=空?
printf(“%s@rash:%s:%s\n“,getenv(“用户”),getcwd(cwd,sizeof(cwd)),文本):
printf(“%s@rash:%s:,getenv(“用户”),getcwd(cwd,sizeof(cwd));
}
void errprintf(字符*文本){
myprintf(空);
printf(“无法运行%s\n”,文本);
}
静态字符*argv[256];
静态int-argc;
静态int-pid=0;
档案*历史;
无效解析输入(字符*输入){
输入=strtok(输入“\n”);
对于(argc=0;argc我认为这里while(input!=NULL?strncmp(input,“exit”,strlen(input))!=0:1{
它将是strlen(“exit”)
我想这里是而(input!=NULL?strncmp(input,“exit”,strlen(input))!=0:1{
它将是strlen(“退出”)
fgets(input, MAX_INPUT, stdin);
parseInput(input);
fgets(input, MAX_INPUT, stdin);
parseInput(input);
在调用strtok之前,尝试复制“输入”字符串。尝试在循环末尾添加调试字符串,以明确输入字符串中的值。欢迎使用堆栈溢出!您介意创建一个吗?我没有看到对
程序()的任何调用
。抱歉,意外删除了它,但我现在添加了它。您的malloc
调用错误。您有一个char
数组,所以您想要sizeof(char)
,而不是sizeof(char*)
。欢迎使用堆栈溢出!您介意创建一个吗?我没有看到任何对程序()
。抱歉,意外删除了它,但我现在添加了它。您的malloc
调用错误。您有一个char
数组,因此您需要sizeof(char)
,而不是sizeof(char*)
。