2015-01-07 68 views
0

我有这个C代码来检索可执行文件的路径。在C字符串中添加双引号C

char buffer[300]; 
char *appPath; 

GetModuleFileName(NULL,buffer,300); 
appPath = buffer; 
MessageBox(NULL,appPath,"path",MB_OK); 

该代码返回一个消息包含如

C:\ MYEXE.EXE

我试图让它返回:

“C:\ MYEXE.EXE”

已在这些帖子上找到并尝试解决方案12但它们与我的问题不兼容。

任何提示?

+0

如果你的缓冲区包含一个'''' –

+0

你的#2文章被标记为[tag:C++],这可能是不够的,这就是为什么它不起作用。 1“不兼容”? – usr2564301

+0

我不知道,我试过了,并返回了一个类似C的字符串:\我的 –

回答

6

如何用snprintf创建一个新字符串?

char somestr[..]; 
snprintf(somestr, sizeof somestr, "\"%s\"", appPath); 
+0

非常感谢,它的工作原理实际上对于Visual Studio,snprintf是_snprintf()。 –

2

你可以简单地做这样的:

char buffer[302]; //< I assume you picked 300 for a reason, so 302 for the extra quotes 
char *appPath; 

int fileNameLen = GetModuleFileName(NULL,buffer+1,300); 
buffer[0] = buffer[fileNameLen+1] = '"'; //< Wrap in quotes 
buffer[fileNameLen+2] = '\0'; //< Now add the \0 back 
appPath = buffer; 
MessageBox(NULL,appPath,"path",MB_OK); 

注意,还是有没有错误检查这里的情况下GetModuleFileName失败,则可能要增加一些。 此代码运行速度比调用某些libc字符串函数要快,但如果发现难以阅读,它可能不是最好的选择。