0
strcpy(argv[0], arg0)
strcpy(argv[1], arg1)
strcpy(argv[2], arg2)
strcpy(argv[3], arg3)
strcpy(argv[4], arg4)
strcpy(argv[5], arg5)
strcpy(argv[6], arg6)
strcpy(argv[7], arg7)
strcpy(argv[8], arg8)
strcpy(argv[9], arg9)

以下が正しくないことはわかっていますが、マクロの正しい使用方法は何ですか?

#define ARG(i) arg##i
for (i = 0;i  < 10; i++)    
{    
strcpy(arg[i], ARG(i);    
}
4

4 に答える 4

2

この場合、マクロの代わりに配列を使用することをお勧めします。はるかにクリーンで、実行時に評価される多くの条件がありません。

char **args[10] = { &arg0, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7, &arg8, &arg9 };

for( i = 0; i < 10; i++ ) {
    strcpy( argv[i], *args[i] );
}
于 2013-04-07T08:46:07.237 に答える
2

呼び出しのシーケンスを単純化する代わりに、strcpy変数arg0, arg1, ...arg9を配列に変換する必要があります。やれば簡単なループで全部できるようになります。

于 2013-04-07T08:24:20.513 に答える
0

ブーストを使用する

#include <stdio.h>
#include <string.h>
#include <boost/preprocessor.hpp>


#define GEN_DEC(x, i, name) char* BOOST_PP_CAT(name, i);
#define GEN_FUNC(x, i, name) strcpy(argv[i], BOOST_PP_CAT(name, i));

int main(int argc, char* argv[]){
BOOST_PP_REPEAT(10,GEN_DEC,arg)
BOOST_PP_REPEAT(10,GEN_FUNC,arg)

   return 0;
}

コマンドライン >gcc -I c:\boost_1_48_0 test.c

小切手 >gcc -I c:\boost_1_48_0 test.c -E

出力サンプル

int main(int argc, char* argv[]){
char* arg0; char* arg1; char* arg2; char* arg3; char* arg4; char* arg5; char* ar
g6; char* arg7; char* arg8; char* arg9;
strcpy(argv[0], arg0); strcpy(argv[1], arg1); strcpy(argv[2], arg2); strcpy(argv
[3], arg3); strcpy(argv[4], arg4); strcpy(argv[5], arg5); strcpy(argv[6], arg6);
 strcpy(argv[7], arg7); strcpy(argv[8], arg8); strcpy(argv[9], arg9);

   return 0;
}
于 2013-04-07T08:49:58.877 に答える