【发布时间】:2023-03-24 06:05:01
【问题描述】:
一段代码的输入是:
initfs /home/bin/usr/a.txt 1000 100
代码如下:
printf("Enter a command\n");
scanf("%99[0-9a-zA-Z ]s", userInput);
printf("%s\n", userInput);
command = strtok(userInput, " ");
filePath = strtok(NULL, " ");
在userInput,"initfs /home/bin/usr/a.txt 1000 100" 被存储和
在变量command中,存储了"initfs"。
但是如果我打印filePath,就会出现分段错误。
它应该打印"/home/bin/usr/a.txt"
可能是什么问题?
【问题讨论】:
-
您确定
userInput中的内容吗?我希望它在"initfs "之后停止,因为您的[0-9a-zA-Z ]不允许斜杠。 -
看起来
filePath是NULL。你有调试器吗?使用一个来解决这个问题很简单。如果你没有调试器,为什么不呢?如果你不知道如何使用一个,为什么不呢?如果您不能插入printf语句来调试它,为什么不呢?总之,你需要学习一些基本的调试技术。 -
当我在您描述的输入上运行您的代码时,
userInput的值是“initfs”,而不是“initfs /home/bin/usr/a.txt 1000 100”。您确定scanf的行为符合您的预期吗? -
@qwrrty - 是的,userInput 只有 initfs。你能告诉我如何将这种输入标记为 4 个变量吗?
-
如果您的意思是输入一整行,
%99[^\n]将比列出所有允许的字符容易得多。
标签: c segmentation-fault strtok