我刚开始学习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行,它可以正常工作。为什么会这样?
答案 0 :(得分:1)
您正在将更多字节复制到名称[]中而不是为其分配 - C不会阻止您执行此操作。额外的字节会覆盖其他内容,在这种情况下是您的其他变量。您正在创建未定义的行为,这在C程序中是一件非常糟糕的事情。
答案 1 :(得分:0)
name
只有8个字符的位置,然后你写入其他内存,可能是你的其他变量。