2010-04-09 98 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問題方法,但是。