字符串-C++后显示的随机字符
Random characters displayed after string - C++
我使用带有GCC编译器的代码块来输出包含数组的字符串,但在打印字符串后,会在字符串末尾输出一个随机字符(每次构建和编译程序时,字符都会发生变化(。
我的代码:
#define BUF_SIZE 10
char buf[BUF_SIZE];
char a = 'a';
for (int i=0; i<BUF_SIZE; ++i)
{
buf[i]= a;
a++;
}
string s = buf;
cout << '[' << s << ']' << endl;
输出:
[abcdefghij"
]
我还想知道为什么最后的方括号在一条新的线上。我预计输出只是"[abcdefhij]"。我想知道为什么会发生这种事。
在C++中,当您使用字符数组作为字符串时,它必须以null结尾(以"\0"结尾(,这样我们才能知道它的长度。请尝试将char buf[BUF_SIZE]
更改为char buf[BUF_SIZE+1]
,并在循环后添加buf[BUF_SIZE]=' '
。
char
字符串实际上只是C风格的以null结尾的字符串。添加' '
以终止它:
#include <iostream>
#include <string>
using namespace std;
int main() {
const size_t BUF_SIZE = 10; // consider size_t
char buf[BUF_SIZE + 1]; // +1 to make room for ' '
char a = 'a';
for (int i = 0; i < BUF_SIZE; ++i)
{
buf[i] = a;
a++;
}
buf[BUF_SIZE] = ' '; // null terminate it
string s = buf;
cout << '[' << s << ']' << endl;
return 0;
}
输出:
[abcdefghij]
如果您只想将char
s添加到字符串tho中,则可以直接在字符串上使用push_back
:
#include <iostream>
#include <string>
using namespace std;
int main() {
const size_t BUF_SIZE = 10;
string s = "";
char a = 'a';
for (int i = 0; i < BUF_SIZE; ++i)
{
s.push_back(a++); // increments a and returns the previous value
}
cout << '[' << s << ']' << endl;
return 0;
}
C字符串以null结尾,这意味着它们以0值结尾。
在这种情况下,如果你想输出字母表的前10个字符,你需要考虑这个空终止字符。
有几种方法可以做到这一点,但你需要做的第一件事是考虑缓冲区中的额外字符:
#define BUF_SIZE 10
char buf[BUF_SIZE + 1];
根据编译器的不同,这个缓冲区内存可能已经初始化为0,但最好不要做假设。
将缓冲区的最后一个值设置为0,以终止字符串:
buf[BUF_SIZE] = 0;
然后,您可以继续执行已经编写的代码的剩余部分,只需将char数组作为字符串输出即可。
char a = 'a';
for (int i=0; i<BUF_SIZE; ++i) {
buf[i]= a;
a++;
}
cout << '[' << buf << ']' << endl;
重要的是将字符串的末尾设置为0。当您将char数组强制转换为字符串时,该值可能已损坏,并且在达到该0值之前,内存中存在随机值。
相关文章:
- 为什么 Serial.println(<char[]>);返回随机字符?
- 字符串-C++后显示的随机字符
- 生成随机.txt文件,10行,10列。充满随机:"*"、"#"、"@"。然后将随机字符替换为'P'
- 在 c++ 的 10x10 数组中生成特定数量的多个随机字符
- 使用指针编译代码后,.cpp文件将变为随机字符
- 生成随机字符/数字
- 随机字符,从强制转换 Arduino 字符串到 Excel BSTR 通过 c++ DLL
- 字符数组中的十六进制导致写入套接字时出现随机字符
- 如何在网格中放置随机字符
- 解压缩 TIFF 数据会打印随机字符
- 尝试以随机字符(长读取)打印字符串返回结果
- UNIX API 调用:使用 read() 函数打开文件并将其打印到屏幕上会增加额外的随机字符
- 如何修复C++中的随机字符输出?
- 为什么从函数返回c弦乐会导致随机字符
- 生成唯一的随机字符并将其保存在数组中
- 编译器将随机字符添加到我的 char 数组中
- 字符串更改程序输出随机字符
- 挑选无重复C 的随机字符
- 随机字符作为在样本中使用 libaws 时返回
- C/C++ - 生成一个随机字符串会覆盖以前的字符串(请参阅下面的代码)