Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C连接字符串变量字符串_C_Concatenation_String Concatenation - Fatal编程技术网

C连接字符串变量字符串

C连接字符串变量字符串,c,concatenation,string-concatenation,C,Concatenation,String Concatenation,我尝试用以下形式连接“string”,变量“string” #包括 int main(){ char*name=“兰尼斯特”; char write_letter[50]=“给您,夫人”,姓名,“欢迎!\r\n” “入门\r\n” “访谈\r\n” “带回家的项目\r\n”; } 有人知道怎么做吗 我看到了一个例子 sprintf(写封信,“欢迎光临,夫人!”,姓名) 但是当我使用大文本时,这是非常困难的。对于编译时可计算常量表达式,只能使用“…”符号。由于name,您的是一个运行时构造 为此

我尝试用以下形式连接“string”,变量“string”

#包括
int main(){
char*name=“兰尼斯特”;
char write_letter[50]=“给您,夫人”,姓名,“欢迎!\r\n”
“入门\r\n”
“访谈\r\n”
“带回家的项目\r\n”;
}
有人知道怎么做吗

我看到了一个例子 sprintf(写封信,“欢迎光临,夫人!”,姓名)
但是当我使用大文本时,这是非常困难的。

对于编译时可计算常量表达式,只能使用
“…”
符号。由于
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";
使用设置的最高警告级别编译。当你这样做的时候,你会 获取类似于“字符数组的初始值设定项字符串为 “太长”(这是GCC生成的警告)。50对我来说太小了 因此,我允许编译器决定数组的大小 (即“写信[])

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

或者,sprintf()-


斯普林特工作。Snprintf更好。我找到了一个带有宏的“sugar”解决方案#定义名称“Lannister”和“Where you is Mrs.”NAME“Welcome!\r\n”;,但我对宏了解不多!对于常量值,可以使用宏。
#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";
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.*/
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.*/