有關「文件存儲路徑中有包含‘空格’的文件夾」程序會報錯的問題

有關「空格」引起的錯誤編程

首先我必須認可,「空格問題」我表述得不夠清楚。它僅僅是在我編程過程當中遇到的小bug。徹底能夠避免。但對因而否能夠正確讀取還須要進一步探討。目前來看,是由於在「cmd」中輸入空格,會讓其自動判斷爲「分開」致使的錯誤。測試

 

以下展現我遇到的問題以及我本身理解獲得的緣由。 spa

第一步,在測試功能過程當中,我註釋掉了全部與改功能無關的代碼。僅保留以下功能的代碼:命令行

讀取命令行輸入3d

 

int _tmain(int argc, _TCHAR* argv[])
//int main(int argc, char **argv)本程序使用的是:_tmain(),形成了不少沒必要要的麻煩,具體爲何選用,是由於程序本來就給了這個,若是修改爲main()則出現了各類不認識的錯誤。
{
    list<Word> lWord;//這個list用做存儲單詞
    string fileName;//文件名字
    wstring w_fileName;
    string filePath;//文件路徑(文件夾路徑)
    wstring w_filePath;
    string argv_1;//讀入的字符串,第二個字符串,用於接受「-s」字符串,用於以後的比較
    wstring w_argv_1;
    cout << "argc = " << argc;//用於查看輸入參數的個數。
    w_fileName = argv[2];
    fileName = WStringToString(w_fileName);
    OpenFile(fileName, lWord);
    Display_for_softwareclass(lWord);
}

第二步,在【項目-wf屬性-配置屬性-調試-命令參數】中設置預計輸入的命令參數。調試

我設置的參數爲code

【-s C:\Users\_Rio56\Documents\Visual Studio 2013\Projects\wf\Debug\test.txt】(請你們注意,「Visual Studio 2013」中包含空格)blog

 

在我眼中,參數包涵2個內容,第一個是:「-s」,事件

第二個是文件路徑:字符串

「C:\Users\_Rio56\Documents\Visual Studio 2013\Projects\wf\Debug\test.txt」。

然而程序沒有像我預期的那樣打開對應的文件夾中的文件。而是報錯了!

(同時我也發現,argc不是我預期的3,而是5。這就說明,命令行認爲我輸入的是5個參數而不是3個參數)如圖所示。

於此同時,程序出現的錯誤是這樣的:

單擊停止後,程序退出。

第三步:我加入斷點進行調試、觀察出錯的地方。

 

在這個地方我能夠清楚的看到,我期待的「文件路徑+文件」被切斷了,只識別了前半部分。

點擊繼續運行。

運行到這裏依舊沒有出錯。再次點擊繼續運行後報錯。此次我點擊了【重試】按鈕。個人wf.exe觸發了一個斷點。

 

我點擊【中斷】進入查看。

 

查看的結果很簡單:sTemp這個變量中什麼都沒有,致使在讀取list中出現了錯誤。

固然,wordBegin中也沒有東西(它出錯了!)

 

回想到命令行窗口的輸出,文件自己就沒有打開啊!因此根本沒有東西讀入。

 

 

 第五步:嘗試正常的狀況

我從新設置了沒有空格的路徑。

在相同的斷點出沒有觸發錯誤,而且能夠讀取文件中的內容

 

運行截圖以下:

最後總結:

「空格出錯」事件,是由於控制檯在讀取時,認爲空格是區分2個參數的標誌,把路徑切分紅了不一樣的部分,而沒有讀取到想獲取的部分所致使的。

(仔細看運行的新程序截圖,發現了新的bug:「神奇的空字符」。。。在上交的做業中我沒有注意到這個問題,如今發現了,那我繼續去找找看吧!)

(也有別的同窗遇到了這個問題,但願你們分享~)

相關文章
相關標籤/搜索