1. ホーム
  2. c

プリプロセッサー・トークンを文字列に変換する

2023-12-09 15:49:55

質問

プリプロセッサー・トークンを文字列に変換する方法を探しています。

具体的には、私はどこかに持っています。

#define MAX_LEN 16

で、バッファオーバーランを防ぐために使いたい。

char val[MAX_LEN+1]; // room for \0
sscanf(buf, "%"MAX_LEN"s", val);

同じことを実現する他の方法にも興味があるのですが、標準ライブラリのみです。

どのように解決するのですか?

参照 http://www.decompile.com/cpp/faq/file_and_line_error_string.htm を特に参照してください。

#define STRINGIFY(x) #x
#define TOSTRING(x) STRINGIFY(x)
#define AT __FILE__ ":" TOSTRING(__LINE__)

というわけで、あなたの問題は、次のようにすれば解決します。 sscanf(buf, "%" TOSTRING(MAX_LEN) "s", val);