在循环C++中指定字符串之后,不会打印该字符串
String is not being printed after Assign it in a Loop C++
我不知道为什么在将每个索引分配给循环中的值后无法打印字符串。我可以打印循环中的每个索引,但不能只使用cout<
#include <iostream>
using namespace std;
int main()
{
//EXPECTED OUTPUT : 000010110010000
string string1 = "011011110011000";
string string2 = "011001000001000";
string final_key;
for(int i = 0; i<15; i++) //XOR
{
final_key[i] = ((string1[i]-'0') ^ (string2[i]-'0')) + '0';
cout<<final_key[i]; //it prints correctly.
}
cout<<final_key; //it doesnt print anything at all :(
return 0;
}
您的问题在中
final_key[i] = ...
final_key
是一个空字符串(大小为0(。你在写不存在的元素。
这类东西在C++中有未定义的行为。也就是说,不能保证你会出错;任何事情都可能发生,包括
- 代码似乎运行良好
- 不相关变量更改其值
- 稍后随机崩溃
要强制进行错误检查,请使用.at()
而不是[]
来访问字符串或向量的元素:
final_key.at(i) = ...
// will throw an exception
要附加元素,请使用
final_key.push_back(...);
问题是您在这里的final_key
字符串中有一个越界访问:
final_key[i] = ((string1[i]-'0') ^ (string2[i]-'0')) + '0';
由于final_key
一开始是一个空字符串,因此在访问第i
个条目之前,您必须适当调整其大小,或者连接到空字符串上:
所以要么是这个:
final_key.resize(15);
for (int i = 0; i < 15; ++i )
final_key[i] = ((string1[i]-'0') ^ (string2[i]-'0')) + '0';
或者这个:
for (int i = 0; i < 15; ++i )
final_key += ((string1[i]-'0') ^ (string2[i]-'0')) + '0';
或者这个:
for (int i = 0; i < 15; ++i )
final_key.push_back(((string1[i]-'0') ^ (string2[i]-'0')) + '0');
注意:
为了表明你正在越界,在你的原始代码中(没有resize(15)
修复(,替换为:
final_key[i] = ((string1[i]-'0') ^ (string2[i]-'0')) + '0';
这个:
final_key.at(i) = ((string1[i]-'0') ^ (string2[i]-'0')) + '0';
您应该抛出一个std::out_of_range
异常,向您显示第i
个条目越界。
您可以通过"填充构造函数">初始化final_key
字符串:http://www.cplusplus.com/reference/string/string/string/
string final_key (15, '0');
此初始化使final_key
等于'000000000000000'
现在cout<<final_key;
将打印相同的结果:'000010110010000'
- 有没有办法将字符串打印为文字?
- 如何通过标准字符串打印 ostream 变量的值?
- 这个随机字符串打印代码有什么问题?
- 比较 C++ 字符串打印中的两个整数数组
- 在C++中从后缀表达式字符串打印单个操作
- 没有得到 ASCII 编号 = 7 的字符串打印输出
- C++字符串到字符串打印不正确,无法获取 unicode 路径
- 如何从数组 c++ 中的字符串打印第 N 个字符
- 将 LPCWSTR 字符串打印到文件
- C++正在将DWORD_PTR*字符串打印到文件中
- 使用#define字符串打印f和警告
- 使用格式字符串打印类
- 如何将字符转换为字符串,并从字符串打印到main函数
- 将vector中结构体的成员字符串打印到cout流
- fprintf() / std::cout 不会将部分字符串打印到 stdout/stderr
- 为什么ostream为定义为' volatile char[] '的字符串打印' 1 ' ?
- c++文件读取和字符串打印
- 如何使用一个字符串打印此unicode行
- 按字符串打印日期
- 如何用c++将字符串打印到控制台