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

有关“空格”引发的错误

首先我必须承认,“空格问题”我表述得不够清楚。它仅仅是在我编程过程中遇到的小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\_Rio56\Documents\Visual Studio 2013\Projects\wf\Debug\test.txt】(请大家注意,“Visual Studio 2013”中包含空格)

 

在我眼中,参数包涵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:“神奇的空字符”。。。在上交的作业中我没有注意到这个问题,现在发现了,那我继续去找找看吧!)

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

 

转载于:https://www.cnblogs.com/-Rio56/p/7606283.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值