【发布时间】: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() 会重新分配内存....
-
通过阅读文档确定比“思考”要好。至少一旦遇到问题,就该是时候了。