C连接字符串变量字符串

时间:2016-09-30 11:19:25

标签: c concatenation string-concatenation

我尝试以下面的形式连接“string”,变量,“string”;

#include <stdio.h>

int main() {
        char *name = "Lannister";

        char write_letter[50] = "Here you are Mrs. ", name, " Welcome!\r\n"
                             "Getting Started\r\n"
                             "Interviews\r\n"
                             "Take-home Projects\r\n";
}

有没有人知道怎么做?

我看到了一个例子 sprintf(write_letter,“你是Mrs.%s欢迎!”,姓名); 但是当我使用大文本时非常困难。

4 个答案:

答案 0 :(得分:4)

您只能对编译时可评估常量表达式使用"..." "..."表示法。由于name,你的是一个运行时构造。

您需要使用strcatsnprintf等。

答案 1 :(得分:2)

如果在编译时已经确定了名称,并且如果在运行时没有必要更改名称,那么请务必选择最简单的替代方法,即 -

#define NAME "Lannister"

char write_letter[] = "Here you are Mrs. " NAME " Welcome!\r\n"
                      "Getting Started\r\n"
                      "Interviews\r\n"
                      "Take-home Projects\r\n";
  

编译最高警告级别设置。当你这样做时,你会   得到类似于&#34; 初始化字符串的字符数组的警告   太长了&#34; (这是海湾合作委员会产生的警告)。 50太小了   这个数组因此我允许编译器决定数组大小   (即&#39; write_letter []&#39;)。

如果需要在运行时更改字符串,请使用strcat() -

char write_letter[150] = "Here you are Mrs. ";
char *name = "Lannister";
char *write_letter_post = " Welcome!\r\n"
                          "Getting Started\r\n"
                          "Interviews\r\n"
                          "Take-home Projects\r\n";

strcat(write_letter, name);
strcat(write_letter, write_letter_post);
/*Use strncat() to prevent buffer overflow possibilities.*/

或,sprintf() -

char *_write_letter = "Here you are Mrs. %s Welcome!\r\n"
                      "Getting Started\r\n"
                      "Interviews\r\n"
                      "Take-home Projects\r\n";
char *name = "Lannister";
char write_letter[150];

sprintf(write_letter, _write_letter, name);
/*Use snprintf() to prevent buffer overflow possibilities.*/

答案 2 :(得分:1)

预处理器能够为您进行字符串连接,因为所涉及的所有字符串都是直接相互写入的,并且它们是纯常量字符串文字。也就是说," "包围的东西,而不是变量。例如,"hello" "world"将由预处理器更改为"helloworld"

这不适用于变量。如果您有字符数组,则需要将它们与运行时函数(如strcat)连接起来。

答案 3 :(得分:1)

作为sprintf的替代方法(使用snprintf(NULL, 0, ...)知道要为结果分配多少内存),您可以使用strcat。但同样,你负责分配足够的内存来包含最后的字符串!