【问题标题】:C : integer variables randomly change valuesC:整数变量随机改变值
【发布时间】:2016-03-24 18:08:53
【问题描述】:

我刚开始学习 C 语言。不过,我对 C# 和 Java 有很好的了解。

#include <stdio.h>     
#include <stdlib.h>
#include "info.h"
int main()
{
    int day = 24, month = 3, year = 2016;

    char name[] = "Ahmad\0";
    strcpy(name, "Ahmad(strcpy-ed string)\0"); // <-- LINE 8

    printf("%s made this program on %d-%d-%d\n", name, day, month, year);

    return 0;
}

如您所见,这些值已分配给日、月和年。但问题是输出具有完全不同的值。输出是这样的

Ahmad(strcpy-ed string) made this program on 1920234272-1684352377-1885565556

更有趣的是,如果我删除第 8 行,它可以正常工作。为什么会这样?

【问题讨论】:

  • 当你复制的东西大于容器的容量时,就会发生这种事。
  • 这是一个溢出...Ahmad\0(6个位置数组)和"Ahmad(strcpy-ed string)\0"(超过6个,我懒得数了)被写在上面
  • 我认为 strcpy() 会重新分配内存....
  • 通过阅读文档确定比“思考”要好。至少一旦遇到问题,就该是时候了。

标签: c char strcpy


【解决方案1】:

您复制到 name[] 的字节数超过了分配给它的字节数——C 不会阻止您这样做。额外的字节正在覆盖其他东西,在这种情况下是您的其他变量。您正在创建未定义的行为,这在 C 程序中是一件非常糟糕的事情。

【讨论】:

    【解决方案2】:

    name只有8个字符的位置,然后你写入其他内存,可能是你的其他变量。

    【讨论】:

      猜你喜欢
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 2021-09-29
      • 1970-01-01
      • 1970-01-01
      • 2017-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多