我有以下代码
// global array a[100][10]
char a[100][10];
main(){
printf("%s\n", a[0]);
strcpy(a[0], "test")
printf("%s\n", a[0]);
if (some condition){
// attempt to re-initialize a[100][10]
char a[100][10];
printf("%s\n", a[0]);
}
}
printf的输出是(按顺序):
(新行)
测试
n $ t
我的问题是:我是否正确地重新初始化了[100] [10]?如果是这样,为什么它输出一个奇怪的结果,即“n $ t” - 我期待一个(新线)就像以前一样?
答案 0 :(得分:4)
如果您没有“重新初始化”a
,那么您正在隐藏全局变量并使用未初始化的内存。
您第一次只打印换行符,因为全局a
具有静态存储持续时间,因此已初始化为0。内部a
具有自动存储功能,不会进行零初始化。
根据您的目的,您可能需要memset
将a
或其他内容完全归零。
答案 1 :(得分:1)
检查此功能,它应该可以解决问题。
答案 2 :(得分:0)
尝试使用-Wshadow
进行编译:)
你不是"重新初始化" a
这里只是创建一个名为a
的其他变量。
首先,静态a
初始化为0,阴影的随机初始化。