在C中初始化并重新初始化全局字符串数组

时间:2014-03-21 00:01:07

标签: c arrays

我有以下代码

// 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” - 我期待一个(新线)就像以前一样?

3 个答案:

答案 0 :(得分:4)

如果您没有“重新初始化”a,那么您正在隐藏全局变量并使用未初始化的内存。

您第一次只打印换行符,因为全局a具有静态存储持续时间,因此已初始化为0。内部a具有自动存储功能,不会进行零初始化。


根据您的目的,您可能需要memseta或其他内容完全归零。

答案 1 :(得分:1)

检查此功能,它应该可以解决问题。

memset

答案 2 :(得分:0)

尝试使用-Wshadow进行编译:)

你不是"重新初始化" a这里只是创建一个名为a的其他变量。

首先,静态a初始化为0,阴影的随机初始化。