使用 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% 的时间导致不可预测的崩溃。
我刚学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% 的时间导致不可预测的崩溃。