【问题标题】:strcat into char[]strcat 转换为 char[]
【发布时间】:2013-03-30 08:00:00
【问题描述】:

我在一个程序中使用 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 声明转换为宏定义,但实际上无法做任何事情

【问题讨论】:

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


    【解决方案1】:

    这条线崩溃的原因:

    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;
    

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

    【讨论】:

    • @JayanthKoushik:嘿,我刚刚注意到我在那儿不见了; :D 别忘了#include <string> :)
    • 这两件事都做了......我把这两个陈述都做了全球性有什么不同吗
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 2013-10-18
    • 2012-01-15
    • 2020-11-25
    相关资源
    最近更新 更多