2

パラメータ/引数として文字列を取る関数があります。

Func(char* strA)
{
...
}

2 つの文字列があります。

#define FIRST "first"
char efg[] = " second";

"first second"基本的にに引数として送信したいのですが、マクロが永久に変更されるためFunc(strA)、使用したくありません。strcat(FIRST, efg);FIRST

"first second"上記のマクロを混乱させずに引数として送信する方法はありますか?

4

3 に答える 3

3

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()が、出力がバッファに送信される点が異なります。戻り値は書き込んだ文字数です。

于 2012-12-20T07:37:07.547 に答える
1

変数としてではなくefg文字列リテラルとして使用できる場合は、隣接する文字列リテラルが暗黙的に連結されているため(仕様C99:5.1.1.2.6)、単純に次のようになります。

Func(FIRST " second");

efgそして同じ理由で、代わりに次のように宣言することができます

char efg[] = FIRST " second";

いずれにせよ、strcatやsprintfよりもはるかに簡単です。

于 2012-12-20T07:54:40.433 に答える
0

おそらく、最初に を使用してマクロを新しい char 配列にコピーしstrcpy()、それstrcat( new_var, efg )をパラメータとして渡すことができます。

于 2012-12-20T07:29:11.183 に答える