有一个函数将字符串作为参数/参数。
Func(char* strA)
{
...
}
我有两个字符串;
#define FIRST "first"
char efg[] = " second";
我希望基本上将"first second"
作为参数发送给Func(strA)
,但我不想使用strcat(FIRST, efg);
,因为它会永久更改我的宏FIRST
。
有没有办法发送"first second"
作为参数而不会扰乱上面的宏?
答案 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 )
- 将其作为参数传递。