有一个函数将字符串作为参数/参数。
Func(char* strA)
{
...
}
我有两个字符串;
#define FIRST "first"
char efg[] = " second";
我想基本上"first second"
作为参数发送到Func(strA)
,但我不想使用strcat(FIRST, efg);
它,因为它会永久改变我的宏FIRST
。
有没有办法在"first second"
不破坏上面的宏的情况下作为参数发送?
您可以使用 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()
,只是输出被发送到缓冲区。返回值是写入的字符数。
如果允许您不efg
使用变量而是字符串文字,那么因为相邻的字符串文字是隐式连接的(规范 C99:5.1.1.2.6),您可以简单地拥有以下内容:
Func(FIRST " second");
出于同样的原因,您也可以声明efg
为
char efg[] = FIRST " second";
无论哪种方式,都比 strcat 或 sprintf 容易得多。
也许您可以先使用 将宏复制到新的 char 数组strcpy()
,然后strcat( new_var, efg )
- 将其作为参数传递。