strcat进入char []

时间:2013-03-30 08:00:00

标签: c++ string string-formatting c-strings strcat

我在程序中使用argp,它使用全局定义的char doc []来显示有关程序的信息。

除了计划信息之外,我还想在此文档中添加GPL通知。

GPL通知被定义为const char *(但我不介意改变它),因为它在其他一些地方使用。

最初我试过这个:

static char doc[] = strcat("basic program info", GPLNOTICE);

但是这给了:

error: initializer fails to determine size of ‘doc’

然后我尝试转换为字符串:

static char doc[] = (string("basic program info") + string(GPLNOTICE)).c_str()

但是这会产生同样的错误

然后我想也许让doc成为一个char *也会起作用

static char *doc = strcat("basic program info", GPLINFO)

...但是这会因分段错误而崩溃

我尝试将GPL通知转换为宏定义,但实际上无法对此进行任何操作

1 个答案:

答案 0 :(得分:2)

此行崩溃的原因:

strcat("basic program info", GPLINFO)

是因为它试图修改存储在只读内存中的常量字符串文字,这会产生 未定义的行为 strcat的正确用法可能如此:

static char buf[1024];
strcpy(buf, "basic program info");
strcat(buf, GPLNOTICE);

但由于您使用编程,因此您应该更喜欢使用std::string而不是C风格的字符串:

std::string doc("basic program info");
doc += GPLNOTICE;

另请注意,在使用它们之前,最好先阅读这些函数的文档:)