首先定义一个字符串string s;
这里面获取的数据是Windows操作系统的盘符信息。例如C:\ E:\这里是循环获取各个磁盘信息的所以不需要疑惑
然后我只想提取盘符信息的首字节,用来传入get_disk_space(char driver, __int64& allSpace, __int64& freeSpace)方法,目的是为了获取每个磁盘的空间。
我们需要传入的这个参数char driver 是一个char类型,这不是巧了吗?string类型使用at()方法即可以获取指定字节,并且得到的类型就是char数组。那么s.at(0)不就刚好获得了s的首字节C(或者E,F等)然后将结果传入到get_disk_space()方法,但是到这里就出现了错误。
单步调试发现获取的结果变成了C烫烫烫烫这样的乱码?
问题出现在哪里?
问题出现在char[] 字符串是以 ‘\0’结尾,char[n] = "string", 当string 长度+‘\0’>n时,会因空间不足出错。string = char类型时也要+‘\0’,不然string输出的时候就会出现乱码问题。
那么string 字符串是不是以 “\0”结尾呢?
https://blog.csdn.net/qq_37037492/article/details/84613381
所以存在的问题就是我只获取的首字节,忘记了‘\0’,
将代码改成
char sc[2];
sc[0] = s.at(0);
sc[1] = '\0';
这样sc[0]就是我要的结果。
细节决定成败