有关“文件存储路径中有包含‘空格’的文件夹”程序会报错的问题

有关“空格”引起的错误编程

首先我必须认可,“空格问题”我表述得不够清楚。它仅仅是在我编程过程当中遇到的小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:“神奇的空字符”。。。在上交的做业中我没有注意到这个问题,如今发现了,那我继续去找找看吧!)

(也有别的同窗遇到了这个问题,但愿你们分享~)

相关文章
相关标签/搜索