2010-04-09 23 views
3

我需要一个字符串传递给一个函数如何创建一个字符串在C通过字符串连接函数参数

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

这是完全不可能的。如果在运行时创建一个字符串,则它不是根据定义的字符串文字。 – 2010-04-09 20:38:04

+0

字符串文字串联是唯一真正有因为长字符串是常见的,这将是在,但定义它们没有一件很痛苦的。你可以在一条凌乱的线上做你想做的事,但不是没有为它分配内存。 – nategoose 2010-04-09 22:14:47

回答

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 2010-04-10 08:47:44

+0

@caf谢谢,不知道。 – qrdl 2010-04-10 10:05:39

1

你需要为这个字符数组;只有字符串文字由编译器连接。

0

都能跟得上。没有办法在纯C中做到这一点,没有分配一个新的缓冲区来连接字符串。

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())); 

有一些内存管理和线程saftey问题方法,但是。

相关问题