2

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

Func(char* strA)
{
...
}

我有两个字符串;

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

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

有没有办法在"first second"不破坏上面的宏的情况下作为参数发送?

4

3 回答 3

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(),只是输出被发送到缓冲区。返回值是写入的字符数。

于 2012-12-20T07:37:07.547 回答
1

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

Func(FIRST " second");

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

char efg[] = FIRST " second";

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

于 2012-12-20T07:54:40.433 回答
0

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

于 2012-12-20T07:29:11.183 回答