如果名字在编译时已经决定,如果没有必要在运行时更改名称,然后通过各种手段选择最简单的替代方案,也就是 -
#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对于 这个数组太小,因此我已经允许编译器决定数组大小 (即'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.*/
sprintf的工作。 Snprintf更好。 – stark
我发现了一个带有宏的“糖”解决方案**#定义名称“Lannister”**和**“在这里,您是Mrs.”NAME“Welcome!\ r \ n”; **,但我不太了解宏! –
对于一个常量值,使用宏很好。 – stark