zoukankan      html  css  js  c++  java
  • 有关“文件存储路径中有包含‘空格’的文件夹”程序会报错的问题

    有关“空格”引发的错误

    首先我必须承认,“空格问题”我表述得不够清楚。它仅仅是在我编程过程中遇到的小bug。完全可以避免。但对于是否可以正确读取还需要进一步探讨。目前来看,是因为在“cmd”中输入空格,会让其自动判断为“分开”导致的错误。

    如下展示我遇到的问题以及我自己理解得到的原因。 

    第一步,在测试功能过程中,我注释掉了所有与改功能无关的代码。仅保留如下功能的代码:

    读取命令行输入

    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属性-配置属性-调试-命令参数】中设置预计输入的命令参数。

    我设置的参数为

    【-s C:Users\_Rio56DocumentsVisual Studio 2013ProjectswfDebug est.txt】(请大家注意,“Visual Studio 2013”中包含空格)

    在我眼中,参数包涵2个内容,第一个是:“-s”,

    第二个是文件路径:

    “C:Users\_Rio56DocumentsVisual Studio 2013ProjectswfDebug est.txt”。

    然而程序没有像我预期的那样打开对应的文件夹中的文件。而是报错了!

    (同时我也发现,argc不是我预期的3,而是5。这就说明,命令行认为我输入的是5个参数而不是3个参数)如图所示。

    于此同时,程序出现的错误是这样的:

    单击中止后,程序退出。

    第三步:我加入断点进行调试、观察出错的地方。

     

    在这个地方我可以清楚的看到,我期待的“文件路径+文件”被切断了,只识别了前半部分。

    点击继续运行。

    运行到这里依旧没有出错。再次点击继续运行后报错。这次我点击了【重试】按钮。我的wf.exe触发了一个断点。

     

    我点击【中断】进入查看。

     

    查看的结果很简单:sTemp这个变量中什么都没有,导致在读取list中出现了错误。

    当然,wordBegin中也没有东西(它出错了!)

     

    回想到命令行窗口的输出,文件本身就没有打开啊!所以根本没有东西读入。

     

     第五步:尝试正常的情况

    我重新设置了没有空格的路径。

    在相同的断点出没有触发错误,并且可以读取文件中的内容

     

    运行截图如下:

    最后总结:

    “空格出错”事件,是因为控制台在读取时,认为空格是区分2个参数的标志,把路径切分成了不同的部分,而没有读取到想获取的部分所导致的。

    (仔细看运行的新程序截图,发现了新的bug:“神奇的空字符”。。。在上交的作业中我没有注意到这个问题,现在发现了,那我继续去找找看吧!)

    (也有别的同学遇到了这个问题,希望大家分享~)

  • 相关阅读:
    企业网络架构
    谷歌推出情境感知API
    Firebase远程更新应用
    黑盒测试
    单元测试
    代码性能分析
    代码静态检查
    PHP 使用正则匹配 去掉 URL 链接第三个斜杠后面的部分
    JQ 全选 反选 取消全选的方法
    织梦导航栏有特定样式用法
  • 原文地址:https://www.cnblogs.com/-Rio56/p/7606283.html
Copyright © 2011-2022 走看看