c++ - 错误的输出格式 意外的文件结尾 - 预期 C++ 的令牌 - 什么可能导致这些错误?
问题描述
我收到一条错误消息,提示错误的输出格式意外的文件结尾 - 需要令牌`
#include<iostream>
#include<string>
using namespace std;
int main(){
string A,B,C;
cin>>A>>B;
int i,len;
len=A.length();
for(i=0;i<len;i++){
if(A[i]==B[i])
C[i]='0';
else
C[i]='1';
}
cout<<C;
return 0;
}
解决方案
您的代码的问题是您正在写入未初始化的内存。当您创建一个std::string
这样的
std::string C
这个字符串没有任何元素,它的支持字符数组很可能是空的。您可以通过执行来检查它C.size()
,它应该返回 0。因此,C[0]
在这种状态下执行类似的操作是未定义的行为,因为您正在写入一个空字符串。您可以通过更改C[i]
为C.at(i)
(使用该at
功能)轻松检查,并且您应该遇到std::out_of_range
错误。作为 的参考状态operator[]
,
返回对指定位置 pos 的字符的引用。不执行边界检查。
因此,您当前的程序可能看起来工作正常,但事实并非如此。
将其更改为push_back
/append
有效,因为这些函数负责增加字符串的支持字符数组的大小(如果需要),然后才写入该内存。
如果您不想使用这些函数,那么一种方法是让字符串已经构造,即使用类似的东西
std::string C = A; // sets up a string which is the same as A
现在您可以安全地访问C[i]
您的代码,因为它已经是 size A.size()
。还有另一种方法可以构造一定大小的字符串,例如
std::string C = std::string(count, ch)
其中count
是您最初想要在字符串中的字符数,并且ch
是您要复制的字符count
。次。所以像:
std::string C = std::string(A.size(), '1');
会构造类似"111000"
ifA
的长度为 6 的东西。
底线:您始终需要确保仅访问分配的内存。
推荐阅读
- r - 选择列名是否存在于列表中
- java - 如何处理这种类型的异常?
- javascript - Socket IO 和动态房间
- swiftui - SwiftUI 中的 Google AdMob 集成
- javafx - 无法使用 Gluon Connect 使用 Twitter 搜索 API 响应填充 JavaFX 表格视图
- java - 包含不同对象的 2 个列表的公共部分
- javascript - Puppeteer - 获取父元素
- reactjs - 带有 TypeError 结果的 Netlify 部署:无法读取未定义的属性“替换”
- linux - 将输出发送到另一个命令
- javascript - 如果在内部单击并在外部释放鼠标,则模式关闭