【问题标题】:Why does the execution of this basic program gives an error?为什么执行这个基本程序会出错?
【发布时间】:2019-02-11 23:29:21
【问题描述】:

我不太明白,为什么执行这个程序会报错?

  int main()
  {
        char *b;
        *b='2';
        printf("%c",*b);
        return 0;
  }

【问题讨论】:

  • [basic] 标签用于 BASIC 编程语言。这看起来像 C,或者可能是 C++,所以我更改了标签。
  • 为了将来参考,请准确告诉我们您看到了什么错误,最好将错误消息复制并粘贴到您的问题中。

标签: c pointers char


【解决方案1】:

就目前而言,b 未初始化,因此可能指向任意位置。当您说*b =... 时,您正在尝试写入某个未指定的位置,这(取决于该位置是什么)通常会导致错误(例如段错误)。也许您打算将 b 声明为 char 而不是指向其中的指针?

【讨论】:

    【解决方案2】:

    这看起来像是直接取自家庭作业或教科书。当您声明 char 指针 b 时,默认情况下它没有被赋予内存地址(它指向的位置),它只包含事先在内存位置中的任何内容。这意味着如果您尝试使用该值(*b = '2' 或 printf),它将尝试读取内存中剩余的随机信息作为地址并在该地址查找字符。这会导致分段错误,或者如果你不走运,它会从内存中抓取垃圾并将其用作 char 值。

    解决方案是创建一个 char 变量 (char a) 并将指针设置为 a 的位置 (b = &a)。

    希望这对您有所帮助,并祝您学习顺利。

    【讨论】:

      猜你喜欢
      • 2023-04-05
      • 2021-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-17
      • 2014-03-31
      • 1970-01-01
      相关资源
      最近更新 更多