【发布时间】:2012-10-03 12:51:28
【问题描述】:
我一直在尝试创建自己的 shell 程序,并且我一直在查看的教程建议使用 strtok() 函数。虽然,我无法简单地解析我的命令行并且我不确定我做错了什么。在 parseCmd() 函数中第一次使用 strtok() 时,我不断收到 Segmentation Fault。
到目前为止,这是我的代码:
#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 actual 可能不是 strtok()。
这是一些输出:
mysh>hi sup
LOGGER: parseCmd(cmd=hi sup, args=0x7fff50ec0b80)
LOGGER: cmdReader=hi
Segmentation fault: 11
【问题讨论】:
-
使用 valgrind。它将为您提供所需的内存错误和泄漏信息。有关更多调试信息,如函数和问题所在行,请在运行 valgrind 之前使用
-g编译您的程序。 -
我是用-g编译后正常运行程序还是有特殊的方法通过valgrind运行程序?
标签: c shell segmentation-fault