【问题标题】:strtok() in c - segmentation faultc中的strtok() - 分段错误
【发布时间】:2012-11-25 18:33:42
【问题描述】:

每次我尝试使用 strtok() 时都会遇到分段错误。不知道为什么-我是 C 的新手。

这是我的代码:

#include "shellutils.h"
#include <stdio.h>
#include <unistd.h>

int main(int argc, char **argv)
{
    char input[150];

    while(1) {
        prompt();
        fgets(input, 150, stdin);

        char *fst_tkn = strtok(input, " ");

        printf("%s", fst_tkn);


        if(feof(stdin) != 0 || input == NULL) {
            printf("Auf Bald!\n");
            exit(3);
        }
    }
}

感谢您的帮助!

【问题讨论】:

  • 您应该检查fst_tkn 是否不是NULL,即使在第一次调用strtok 之后也是如此。
  • 顺便说一句,返回EXIT_FAILURE 而不是任意值,它在stdlib.h 中声明。
  • 这段代码正确吗?至少在 Linux 上,您应该是 #include &lt;string.h&gt; 才能正确选择 strtok。当行是strtok(input, ' ');(注意单引号)时,我会遇到类似的段错误,但它对我来说就像上面输入的那样。
  • 发布源代码时,请发布您运行它的操作系统。另外,什么是 shellutils.h,它在哪里?这是什么版本的C。我习惯于必须在可执行代码开始之前预先声明指针。
  • 很高兴知道。它现在可以工作了,非常感谢!

标签: c segmentation-fault strtok


【解决方案1】:

关于代码:

char *fst_tkn = strtok(input, " ");
printf("%s", fst_tkn);

如果您的input 变量为空,或仅包含空格,则fst_tkn 将设置为NULL。然后,当您尝试将其打印为字符串时,所有赌注都已关闭。

你可以通过调整你给input的值在下面的代码中看到:

#include <stdio.h>
#include <string.h>
int main (void) {
    char input[] = "";
    char *fst_tkn = strtok (input, " ");
    printf ("fst_tkn is %s\n", (fst_tkn == NULL) ? "<<null>>" : fst_tkn);
    return 0;
}

【讨论】:

    猜你喜欢
    • 2023-03-08
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    • 2023-03-24
    相关资源
    最近更新 更多