使用void函数在头文件中初始化struct数组

时间:2015-07-27 17:48:54

标签: c++ arrays header-files

我只是在学习c ++。我想知道像这样初始化我的数组是否合法?我的目标是避免在cpp中使用非常长的数组列表。 如果不是我该做什么才能合法? Visual Studio不会强调错误,但应用程序失败并在开始时崩溃。

header.h中的

#ifndef _INC_HEADER_H
#define _INC_HEADER_H

struct symname{ char* DP; };

struct symname getSymName[4];

void init_allArrays(){
        getSymName[0].DP = "name0";
        getSymName[1].DP = "name1"; 
        getSymName[2].DP = "name2"; 
        getSymName[3].DP = "name3"; 
}

#endif // _INC_HEADER_H

现在在我的main.cpp中:

#include "header.h" 

init_allArrays() ; 

char * test = getSymName[0].DP  // can i acceed to the array at this point ?!

1 个答案:

答案 0 :(得分:0)

您不想将字符串文字("这是字符串文字")分配给字符指针。修改该字符串文字是未定义的行为,会导致程序崩溃。

如上所述,通常你想使用std :: string以及尽可能避免使用全局变量。

此外,它看起来像是在main()之类的函数之外运行,因此你应该阅读isocpp.org/wiki/faq/ctors#static-init-order

该文章得出的结论是,在运行时期间无法确保初始化全局/静态的订单,那么如果在char * test = getSymName[0].DP之前运行init_allArrays() ;会怎么样?这可能会很糟糕,但也可能只有50%的时间会发生不可预测的崩溃。