C连接字符串变量字符串
C concatenate string variable string
我尝试以以下形式连接 "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, "Here you are Mrs. %s Welcome!", 姓名);
但是当我使用大文本时非常困难。
您只能将 "..." "..."
表示法用于 编译时可计算常量表达式 。由于 name
.
,您的是运行时构造
您需要使用 strcat
、snprintf
等。
预处理器能够为您进行字符串连接,前提是涉及的所有字符串都是直接在彼此之后写入的,并且它们是纯常量字符串文字。即" "
包围的东西,不是变量。例如 "hello" "world"
将被预处理器更改为 "helloworld"
。
这不适用于变量。如果您有字符数组,则需要将它们与 运行 时间函数连接起来,例如 strcat
.
作为 sprintf
的替代方法(使用 snprintf(NULL, 0, ...)
知道要为结果分配多少内存),您可以使用 strcat
。但同样,您有责任分配足够的内存来包含最终字符串 !
如果名称已经在编译时确定,并且如果没有必要在运行时更改名称,那么一定要选择最简单的替代方案,即 -
#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";
Compile with highest warning level set. When you do that you will
get a warning similar to "initializer-string for array of chars is
too long" (this is the warning generated by GCC). 50 is too small for
this array hence I have allowed the compiler to decide the array size
(i.e. 'write_letter[]').
如果您需要在运行时更改字符串,请使用 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.*/
我尝试以以下形式连接 "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, "Here you are Mrs. %s Welcome!", 姓名); 但是当我使用大文本时非常困难。
您只能将 "..." "..."
表示法用于 编译时可计算常量表达式 。由于 name
.
您需要使用 strcat
、snprintf
等。
预处理器能够为您进行字符串连接,前提是涉及的所有字符串都是直接在彼此之后写入的,并且它们是纯常量字符串文字。即" "
包围的东西,不是变量。例如 "hello" "world"
将被预处理器更改为 "helloworld"
。
这不适用于变量。如果您有字符数组,则需要将它们与 运行 时间函数连接起来,例如 strcat
.
作为 sprintf
的替代方法(使用 snprintf(NULL, 0, ...)
知道要为结果分配多少内存),您可以使用 strcat
。但同样,您有责任分配足够的内存来包含最终字符串 !
如果名称已经在编译时确定,并且如果没有必要在运行时更改名称,那么一定要选择最简单的替代方案,即 -
#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";
Compile with highest warning level set. When you do that you will get a warning similar to "initializer-string for array of chars is too long" (this is the warning generated by GCC). 50 is too small for this array hence I have allowed the compiler to decide the array size (i.e. 'write_letter[]').
如果您需要在运行时更改字符串,请使用 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.*/