在作为参数传递给函数时连接字符串

时间:2012-12-20 07:21:50

标签: c string

有一个函数将字符串作为参数/参数。

Func(char* strA)
{
...
}

我有两个字符串;

#define FIRST "first"
char efg[] = " second";

我希望基本上将"first second"作为参数发送给Func(strA),但我不想使用strcat(FIRST, efg);,因为它会永久更改我的宏FIRST

有没有办法发送"first second"作为参数而不会扰乱上面的宏?

3 个答案:

答案 0 :(得分:3)

您可以使用sprintf函数首先在临时缓冲区中写入:

#define FIRST "first"
char efg[] = " second";  
char* space = " ";
char* strA = calloc(strlen(FIRST) + strlen(space) + strlen(efg) + 1, sizeof(char));  

sprintf(strA,"%s%s%s",FIRST, space, efg);

Func(strA);  

free(strA);  

试一试!!


注意:不要忘记free()动态分配的内存。

描述:
sprintf()函数与printf()类似,只是输出发送到缓冲区。返回值是写入的字符数。

答案 1 :(得分:1)

如果您不允许将efg作为变量而是作为字符串文字,那么因为相邻的字符串文字是隐式连接的(规范C99:5.1.1.2.6),您可以简单地使用以下内容:

Func(FIRST " second");

出于同样的原因,您也可以将efg声明为

char efg[] = FIRST " second";

无论哪种方式,都比strcat或sprintf容易得多。

答案 2 :(得分:0)

也许您可以先使用strcpy()将宏复制到新的char数组,然后strcat( new_var, efg ) - 将其作为参数传递。