【问题标题】:unable to find reason for Segmentation fault无法找到分段错误的原因
【发布时间】:2016-07-31 12:44:09
【问题描述】:

我正在编写以下代码来根据字符串的长度处理字符串,但遇到了分段错误,搜索了一下,发现它与指针有关,但我无法找出相同的原因。

#include <string.h>
#include <iostream.h>
#include <stdio.h>

int main()
{
   char input[500];
   strcpy(input, "quick brown fox jumps on lazy dog");
   const char s[2] = " ";
   unsigned int num = 7;
   unsigned int lent;
   cin >> num;
   char *token;
   token = strtok(input, s);
   while( token != NULL ) 
   {
        lent= strlen(token);
        if(lent <= num)
            printf( " %s", token );
        token = strtok(NULL, s);
        if(strlen(token) <= (num-lent))
            printf("%s",token );
        printf("\n");
   }

   return(0);
}

【问题讨论】:

  • 你试过使用调试器吗?
  • 现在正是你学习的好时机gdb
  • 您没有检查循环中的strtok 是否返回NULL。旁注:您的代码几乎完全是 C,C 没有任何问题,但如果您想编写 C++,可能需要阅读过去 5 年出版的一本好 C++ 书籍。
  • 关键是这类问题非常普遍,以至于人们制作了一个工具来简化它。它被称为调试器,它会告诉您错误的确切位置,并让您查看变量以了解失败的原因。你应该习惯一个。
  • 所有这些工作,在 C++ 中,您只需要to do this

标签: c++ segmentation-fault


【解决方案1】:

token = strtok(NULL, s);

您到达了输入字符串的末尾。而token 在这一行变为NULL。但是,您会立即使用strlen(token)

在任何可能取消引用它的操作之前检查token

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    相关资源
    最近更新 更多