私は自分のシェルプログラムを作成しようとしていて、私が見ているチュートリアルはstrtok()関数の使用をアドバイスしています。ただし、コマンドラインを解析するだけではうまくいかず、何が間違っているのかわかりません。parseCmd()関数内でstrtok()を最初に使用しているときに、セグメンテーション違反が発生し続けます。
これまでの私のコードは次のとおりです。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#define MAXSIZE 512
int parseCmd(char *cmd, char *args[])
{
printf("LOGGER: parseCmd(cmd=%s, args=%p)\n", cmd, args);
char cmdDelims[] = " >";
char *cmdReader;
cmdReader = strtok(cmd, cmdDelims);
printf("LOGGER: cmdReader=%s\n", cmdReader);
int i = 0;
while (cmd != NULL)
{
printf("LOGGER: %d counter", i);
args[i] = strdup(cmdReader);
cmdReader = strtok(NULL, " >");
i++;
}
}
int main()
{
char *in;
in = malloc(MAXSIZE);
char *args[10];
char *cmd = NULL;
int errorBit = 0;
int terminationBit = 1;
char inDelims[] = "\n";
while (terminationBit)
{
printf("mysh>");
fgets(in, MAXSIZE, stdin);
cmd = strtok(in, inDelims);
errorBit = parseCmd(cmd, args);
if (errorBit)
{
fprintf(stderr, "Error: Cannot parse command %s\n", cmd);
exit(1);
}
if (*args == "exit")
{
terminationBit = 0;
}
}
return 0;
}
このトピックに関するヘルプやアドバイスをいただければ幸いです。
編集:出力に基づいて、実際のsegfaultはstrtok()ではない可能性があります。
ここにいくつかの出力があります:
mysh>hi sup
LOGGER: parseCmd(cmd=hi sup, args=0x7fff50ec0b80)
LOGGER: cmdReader=hi
Segmentation fault: 11