sprintfステートメントでマクロを使用しようとしています。こんな感じです:
#define MACR 6
....
int Number= 5;
char Formatted[30];
sprintf( Formatted, "%06d", Number );
ここでは、6の代わりにMACRを使用したいと思います。誰か助けてもらえますか?
sprintfステートメントでマクロを使用しようとしています。こんな感じです:
#define MACR 6
....
int Number= 5;
char Formatted[30];
sprintf( Formatted, "%06d", Number );
ここでは、6の代わりにMACRを使用したいと思います。誰か助けてもらえますか?
書式指定子を使用して*
、幅を引数として渡します。このようなものが動作するはずです:
sprintf( Formatted, "%0*d", MACR, Number );
ただし、マクロではなく定数を使用してください。
最も簡単な解決策は、長さを で指定し'*'
、マクロを引数として渡すことです。
sprintf( formatted, "%0*d", MACR, number );
または、次のように文字列を連結できます。
sprintf( formatted, "%0" STRINGIZE(MACR) "d", number );
通常の STRINGIZE マクロを使用:
#define STRINGIZE_HELPER(x) # x
#define STIRNGIZE(x) STRINGIZE_HELPER(x)
(もちろん、最も簡単で安全な解決策は、 を忘れてsprintf
を使用することstd::ostringstream
です。)
これを解決するには、次の 2 つの方法があります。
マクロに完全な形式を含めます。
#define MACR "%06d"
sprintf(Formatted, MACR, Number);
*
幅指定子を使用します。
#define MACR 6
sprintf(Formatted, "%0*d", MACR, Number);
#define MAKE_TEXT(x) #x
sprintf( Formatted, "%0"MAKE_TEXT(MACR)"d", Number );