C:整数变量随机改变值

时间:2016-03-24 18:08:53

标签: c char strcpy

我刚开始学习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行,它可以正常工作。为什么会这样?

2 个答案:

答案 0 :(得分:1)

您正在将更多字节复制到名称[]中而不是为其分配 - C不会阻止您执行此操作。额外的字节会覆盖其他内容,在这种情况下是您的其他变量。您正在创建未定义的行为,这在C程序中是一件非常糟糕的事情。

答案 1 :(得分:0)

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