2015-01-07 66 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字符串函數要快,但如果發現難以閱讀,它可能不是最好的選擇。