我知道这将有一个简单的答案,但难倒。我已经尽可能简化了代码,以实现这一点。静态字符数组在行间意外行为
我有一个简单的头文件,称它为啊
它具有以下,仅此而已(它作为一个全球性的设置文件在我的项目,选择包含的所有文件)
#ifndef A_H
#define A_H
namespace settings{
static char name[16]={'\0'};
}
#endif
我再有另一个类,有自己的头文件,让我们把它叫做b.cpp(BH与未显示)
#include "a.h"
void B::doSomething()
{
strcpy(settings::name,"I like Dogs");
}
最后,该访问设置::名第三类,它命名为c .cpp(与c.h没有显示)
#include "a.h"
void C::printSomething()
{
printf("Some Girls Say %s\n",settings::name);
}
唉,所有打印的是“有些女孩说”。是什么赋予了?我不明白如何设置::名称是不存在的功能破坏B :: doSomething()(我只能猜测这是问题)。是strcpy懒惰,只是指向设置::名称到“我喜欢狗”开始,而不是实际上像strdup行事?
任何帮助和解决方法非常感谢。谢谢!
编辑:为了进一步明确,C.doSomething()在C.printSomething()之前被调用。
这里没有足够的信息。我们需要知道包含的顺序和代码中的控制流。根据一般经验,不要在头文件中声明** static **变量。 – Chintan 2011-04-14 20:15:39