如何通过字符串拼接在C语言中创建一个字符串字面量作为函数参数

3
我需要将一个字符串字面量传递给一个函数。
myfunction("arg1" DEF_CHAR "arg1");

现在,构造的字符串字面量中的一部分需要是一个函数返回值。
stmp = createString();
myfunction("arg1" stmp "arg2"); //oh that doesn't work either

有没有一种方法可以在一行中完成这个操作?
myfunction("arg1" createString() "arg2"); //what instead?

注意:请只使用C语言。

我的目标是避免为此初始化一个新的字符数组 = /


8
这是完全不可能的。如果一个字符串是在运行时创建的,根据定义它就不是一个字符串字面量。 - Pascal Cuoq
字符串字面量连接之所以存在,是因为长字符串很常见,如果没有它,定义它们将会很麻烦。你可以在一行代码中实现你想要的操作,但这不是没有分配内存的。 - nategoose
5个回答

4

您无法在运行时构建字符串字面量,但您可以像这样创建字符串:

char param[BIG_ENOUGH];

strcpy(param, "arg1");
strcat(param, createString());
strcat(param, "arg2");
myfunction(param);

1
实际上,strcpy()strcat()返回指向目标字符串的指针的原因正是为了这种情况 - 它让你能够执行myfunction(strcat(strcat(strcpy(param, "arg1"), createstring()), "arg2")) - caf

2
char buffer[1024] = {0};
//initialize buffer with 0 
//tweak length according to your needs

strcat(buffer, "arg1");
strcat(buffer, createString()); //string should be null ternimated
strcat(buffer, "arg2");

myfunction(buffer);

2

C语言不支持动态字符串,所以您所尝试的是不可能的。您的createString()函数返回的是一个变量,而不是文字常量,因此不能将其与其他文字常量连接起来。尽管如此,如果您真的很在意将其放在一行中,可以创建一个辅助函数来实现这个目的,类似于下面的示例:

char * my_formatter( const char * format, ... )
{
...
}

myfunction(my_formatter("arg1%sarg2", createString()));

然而,该方法存在一些内存管理和线程安全性问题。


1
你需要为此创建一个字符数组;编译器只会连接字符串字面量。

0

不行。在纯C中没有办法将字符串连接起来而不分配新的缓冲区。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接