我只是在学习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 ?!
答案 0 :(得分:0)
您不想将字符串文字("这是字符串文字")分配给字符指针。修改该字符串文字是未定义的行为,会导致程序崩溃。
如上所述,通常你想使用std :: string以及尽可能避免使用全局变量。
此外,它看起来像是在main()之类的函数之外运行,因此你应该阅读isocpp.org/wiki/faq/ctors#static-init-order
该文章得出的结论是,在运行时期间无法确保初始化全局/静态的订单,那么如果在char * test = getSymName[0].DP
之前运行init_allArrays() ;
会怎么样?这可能会很糟糕,但也可能只有50%的时间会发生不可预测的崩溃。