关于C++下使用string.at(0)获得的char类型转字符串输出时出现 烫烫烫烫 的乱码问题

首先定义一个字符串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]就是我要的结果。

细节决定成败

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值