为什么strtok在给出*字符串时会出现段错误,但在给出字符串[]时却没有?

时间:2016-01-13 23:30:56

标签: c strtok

考虑以下计划

  public ActionResult Index()
  {
    foreach (var r in db.Details.Where(emp => emp.DateExpired.HasValue && emp.DateExpired.Value == DateTime.Today))
    {
        r.Expire = true;
    }
    db.SaveChanges();
    return View();
  }

它将是段错误。但是,如果我将* str更改为str [80],它就不会。这是为什么?

由于

1 个答案:

答案 0 :(得分:3)

问题在于类型错误。

char *str = "This is a test.";

它可能会说char*,但右边的东西实际上是char const*(C在允许类型双关语中是非常宽松的(是正确的单词))。任何修改const的尝试都是未定义的行为。

函数strtok()实际上修改了基础字符串(通过插入' \ 0')所以这是未定义的行为。

通过执行修复。

char str[] = "This is a test.";