C:整数变量随机改变值
C : integer variables randomly change values
刚开始学C语言。不过,我在 C# 和 Java 方面有着良好的历史。
#include <stdio.h>
#include <stdlib.h>
#include "info.h"
int main()
{
int day = 24, month = 3, year = 2016;
char name[] = "Ahmad[=10=]";
strcpy(name, "Ahmad(strcpy-ed string)[=10=]"); // <-- 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 行,它会正常工作。为什么会这样?
name
只有8个字符的位置,然后你写入其他内存,可能是你的其他变量。
您复制到 name[] 中的字节数超过分配给它的字节数 -- C 不会阻止您这样做。额外的字节覆盖了其他东西,在这种情况下是你的其他变量。您正在创建未定义的行为,这在 C 程序中是一件非常糟糕的事情。
刚开始学C语言。不过,我在 C# 和 Java 方面有着良好的历史。
#include <stdio.h>
#include <stdlib.h>
#include "info.h"
int main()
{
int day = 24, month = 3, year = 2016;
char name[] = "Ahmad[=10=]";
strcpy(name, "Ahmad(strcpy-ed string)[=10=]"); // <-- 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 行,它会正常工作。为什么会这样?
name
只有8个字符的位置,然后你写入其他内存,可能是你的其他变量。
您复制到 name[] 中的字节数超过分配给它的字节数 -- C 不会阻止您这样做。额外的字节覆盖了其他东西,在这种情况下是你的其他变量。您正在创建未定义的行为,这在 C 程序中是一件非常糟糕的事情。