【问题标题】:Why this code compile but not running [duplicate]为什么这段代码编译但不运行[重复]
【发布时间】:2017-04-03 12:50:13
【问题描述】:

为什么这段代码编译但不运行?

int main() {
     char *s;

     scanf("%15s", s);
     puts(s);
 } 

【问题讨论】:

  • 很抱歉必须通知您,编译正常然后无法正常运行是正常行为。
  • 答案准确地回答了问题所在,但我确实觉得它缺少返回语句
  • @BP 根据 C11 标准,main 中不需要返回语句。

标签: c pointers puts


【解决方案1】:

因为s是一个未初始化的指针,你不能在那里存储数据(因为那里“不存在”)。

试试:

char s[32];

相反,这为您提供了 32 个字符的空间,scanf() 可以在其中写入。

【讨论】:

    【解决方案2】:

    您需要为scanf(...) 提供内存char *s 只是指向某些内存的指针,而不是内存本身。您可以malloc(...) 内存并让s 指向它,或者通过char s[16] 在堆栈上本地分配它

    【讨论】:

      【解决方案3】:

      首先,为scanf 调用提供适当的缓冲区。例如,char *s 只是一个未初始化的指针,而不是 char s[128]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-06
        • 2013-08-08
        • 1970-01-01
        • 2014-09-14
        • 1970-01-01
        • 2010-10-24
        相关资源
        最近更新 更多