开发者

how to create a string literal as a function argument via string concatenation in c

I need to pass a string literal to a function

myfunction("arg1" DEF_CHAR "arg1");

now part of that constructed string literal needs to be a function return

stmp = createString();
myfunction("arg1" stmp "arg2"); //oh that doesn't work either

is there any way to do this in one line?

myfunction("arg1" createString() "arg2"); //what in开发者_开发问答stead?

NOTE: C only please.

My goal is to avoid initializing a new char array for this =/


You cannot build string literal at runtime, but you can create the string, like this:

char param[BIG_ENOUGH];

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


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


C does not support dynamic strings, so what you're attempting is impossible. The return value from your createString() function is a variable, not a literal, so you can't concatenate it with other literals. That being said, if it's really important to you to have this on one line, you can create a helper function to facilitate this, something like the following:

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

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

There are some memory management and thread saftey issues with this approach, however.


You need to make a character array for this; only string literals are concatenated by the compiler.


Nope. No way to do this in pure C without allocating a new buffer to concatenate the strings.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜