C 作为参数传递给函数时连接字符串
有一个函数将字符串作为参数/参数C 作为参数传递给函数时连接字符串,c,string,C,String,有一个函数将字符串作为参数/参数 Func(char* strA) { ... } 我有两条弦 #define FIRST "first" char efg[] = " second"; 我基本上想将“first second”作为参数发送到Func(strA),但我不想使用strcat(first,efg)因为它将永久性地更改我的宏第一个 有没有一种方法可以将“first second”作为参数发送而不打乱上面的宏?也许您可以先使用strcpy()将宏复制到一个新的字符数组中,然后使用st
Func(char* strA)
{
...
}
我有两条弦
#define FIRST "first"
char efg[] = " second";
我基本上想将“first second”
作为参数发送到Func(strA)
,但我不想使用strcat(first,efg)代码>因为它将永久性地更改我的宏第一个
有没有一种方法可以将“first second”
作为参数发送而不打乱上面的宏?也许您可以先使用strcpy()将宏复制到一个新的字符数组中,然后使用strcat(new_var,efg)
-将其作为参数传递。也许您可以首先使用strcpy()将宏复制到一个新的字符数组中
,然后strcat(新变量,efg)
-将其作为参数传递。您可以使用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()
,只是输出被发送到缓冲区。返回值是写入的字符数 您可以使用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容易得多。如果允许您不将efg
作为变量,而是作为字符串文字,那么由于相邻字符串文字是隐式连接的(规范C99:5.1.1.2.6),您可以简单地拥有以下内容:
Func(FIRST " second");
出于同样的原因,您也可以将efg
声明为
char efg[] = FIRST " second";
无论哪种方式,都比strcat或sprintf容易得多。charefg[]={“second”}代码>不正确。它应该是char efg[]=“秒”代码>@Pubby有什么建议吗?@Pubby:为什么?两者都是完全有效的C.@R。。哦,我没意识到。那就别管了。@Sunny你可以查看我更新的答案。char efg[]={“second”}代码>不正确。它应该是char efg[]=“秒”代码>@Pubby有什么建议吗?@Pubby:为什么?两者都是完全有效的C.@R。。哦,我没意识到。那就别管了。@Sunny你可以检查我更新的答案。@R。。我确信你会是第一个指出这一点的人。它是安全的(除了没有检查calloc
的返回值是否成功,以及calloc
的参数数目错误),因为所需的空间是正确计算的,但无论如何,使用snprintf
还是不错的。OP也应该知道缓冲区在某个时候需要释放。另一个小改进:不要强制转换calloc()
@H2CO3 Done.的返回值。。谢谢阿帕德@R我确信你会是第一个指出这一点的人。它是安全的(除了没有检查calloc
的返回值是否成功,以及calloc
的参数数目错误),因为所需的空间是正确计算的,但无论如何,使用snprintf
还是不错的。OP也应该知道缓冲区在某个时候需要释放。另一个小改进:不要强制转换calloc()
@H2CO3 Done.的返回值。。谢谢阿帕德!