【问题标题】:String function returns seg fault字符串函数返回段错误
【发布时间】:2015-02-10 01:05:26
【问题描述】:

我目前有一个以 char 数组形式接受用户输入的函数。我试图通过下面使用的函数解析输入,以及为使用的指针分配内存。但是,我期望用户的输入是两个字符“ab”和一个空格,后跟一个整数。当我尝试将其转换为整数时,程序继续进行段错误。我已经尝试分配更多内存,更改数组的大小,任何帮助将不胜感激!

    int input(char input[10])
    {
        int val;
        char *firstW,*secondW;

        firstW = malloc(sizeof(10));
        secondW = malloc(sizeof(10));

        firstW = strtok(input," ");
        firstW = strstr(input,"ab");
        secondW = strtok(NULL, " ");

        val = atoi(secondW);

//When atoi is called, secondW contains any integer for instace "10", but of course as a string type
//trying to convert string to integer, but returns seg fault

【问题讨论】:

  • secondW 在哪里声明?调用 atoi 的时候里面是什么?
  • 你永远不会检查secondW != NULL。
  • 如果 input 源自字符串文字,这可能是问题 --- strtok 修改了 input(并且修改字符串文字是未定义的行为)。附带说明一下,firstW 和 secondW 的 mallocs 是多余的 --- strtok 返回指向(已修改)input 的指针。
  • secondW 使用 10 的值,使用 (mvprintw) 打印时,该值打印到屏幕上,所以我不认为它为 null。

标签: c arrays string segmentation-fault


【解决方案1】:

malloc(sizeof(10)) 可能是一个错误。它不分配 10 个字节,但它分配了足够的字节来保存int。根据您计算机的体系结构,这可能是 4 或 8 个字节。相反,当您初始化 firstW 和 secondW 时,您需要 malloc(10)。

【讨论】:

  • 肯定是个错误。但代码实际上从未使用过该值。指针立即被strtok/strstr的返回值覆盖
猜你喜欢
  • 2012-03-28
  • 2013-11-15
  • 1970-01-01
  • 1970-01-01
  • 2014-07-13
  • 1970-01-01
  • 1970-01-01
  • 2013-12-17
  • 1970-01-01
相关资源
最近更新 更多