使用 void 函数初始化 header 中的结构数组

Initialize struct array in header with void function

我刚学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 ?!

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

如前所述,通常您希望使用 std::string 并尽可能避免使用全局变量。

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

那篇文章的意思是,在 运行 时间内,您无法保证 globals/statics 如何初始化的顺序,所以如果 char * test = getSymName[0].DP 是 运行 怎么办?在 init_allArrays() ; 之前?那会很糟糕,但也可能只发生 50% 的时间导致不可预测的崩溃。