-1

我有近 120 个文件,名称如下 - a1.txt,a2.txt... 我将用户的输入作为 int 输入,并使用它打开一个特定的文件。我尝试为此使用宏,但它不起作用。这是我使用的。文件是 unicode

#define concat(d) L"a"#d".txt" 
.
.
.
wchar_t *basefile = concat(d);

当我使用 wprintf 查看 concat 生成的内容时,我发现它只读取到“a”并忽略了宏的其余部分。请在此处指出需要更正的内容,或者我是否可以使用任何替代方法。谢谢!

4

2 回答 2

1

如评论中所述,您不能使用编译时宏来处理在运行时获取的用户输入。

你想要的是库函数sprintf()

http://www.manpages.info/linux/sprintf.3.html

对于宽字符串,您可以使用swprintf()

http://www.cplusplus.com/reference/clibrary/cwchar/swprintf/

请注意,原始文件的一个问题sprintf()是它不接受输出缓冲区长度的参数,并且它可能会在缓冲区末尾写入一个字符串并覆盖您的堆栈或堆。有一些变体sprintf()可以解决这个问题,例如snprintf(). 但幸运的是,宽版本swprintf()确实采用了指定输出缓冲区大小的参数。

于 2012-11-18T07:31:59.250 回答
0

如果这个数字真的是用户在运行时输入的,那么你必须用类似的东西来组成文件名snprintf。只有当这是一个在编译时已知的用于识别您的文件的数字(实际上是任何令牌)时,您的方法才有效。

所以像

#define D 42

.
.
.
wchar_t *basefile = concat(D);

应该管用。

于 2012-11-18T07:33:06.413 回答