2012-11-18 59 views
-1

我有近120个文件的名称是这样的 - a1.txt,a2.txt ... 我从用户的输入作为一个整数,并使用我必须打开一个特定的文件。 我试过使用宏,但它不工作。 以下是我为using.the文件是Unicode的使用宏来选择一个文件

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

当我用wprintf看到什么CONCAT正在生成,我发现它只读取,直到“一”,而忽略了宏观的剩下的部分。 请指出这里需要纠正什么,或者是否有其他方法可以使用。谢谢!

回答

1

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

你想要的是库函数sprintf()

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

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

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

注意,与原来的sprintf()一个问题是,它不会为输出缓冲区的长度提供参数,并且它可能会写入超过en的字符串然后覆盖你的堆栈或你的堆。有sprintf()可修复此问题,例如snprintf()。但幸运的是,宽版本swprintf()确实接受了指定输出缓冲区大小的参数。

0

如果这个数字在运行时真的是用户输入,那么你必须编写文件名,然后用snprintf左右。只有在编译时识别文件的编号(实际上是任何标记)时,您的方法才会有效。

因此,像

#define D 42 

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

应该工作。

相关问题