我正在编写一个程序以生成一个随机的16位数字。我的方法是使用字符数组一个接一个地存储随机数。最终,我想将此字符数组转换为字符串。我该怎么办?
我尝试将其直接转换为字符串,但是当我将其输出到屏幕上时,输出在16位数字后给出了一些奇怪的字符。
#include <iostream>
#include <string>
using namespace std;
int main(){
char acct_num[16];
for(int x = 0; x < 16 ; x++){
acct_num[x] = rand()%10 + '0';
}
acct_num[16] = '\0';
cout<<string(acct_num)<<endl;
}
我只希望16位数字作为字符串。
答案 0 :(得分:4)
您已经用完了数组的末尾。 C样式的字符串称为字符串(而不是字符数组)。您已经在字符串的末尾正确添加了“ \ 0”,但是您已经写入了17个字节,因此只需将char缓冲区的长度设置为17个字节,以便数字可以包含16个字节。
使数组的长度为17个字符:
#include <iostream>
#include <string>
using namespace std;
int main(){
char acct_num[17];
for(int x = 0; x < 16 ; x++){
acct_num[x] = rand()%10 + '0';
}
acct_num[16] = '\0';
cout<<string(acct_num)<<endl;
}
答案 1 :(得分:1)
此外,您可以明确指定大小,以免最后出现// define new type called BBar
// same with bar
type BBar Bar
xx := new(BBar)
// the BBar doesn't have UnmarshalXML method
xml.Unmarshal([]byte(result), xx)
*m = Bar(*xx)
:
'\0'
答案 2 :(得分:0)
在这种情况下,我建议仅使用std::string
而不是完全使用char[]
:
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
int main(){
std::srand(std::time(0));
std::string acct_num;
acct_num.resize(16);
for(int x = 0; x < 16 ; x++){
acct_num[x] = std::rand()%10 + '0';
}
std::cout << acct_num << std::endl;
return 0;
}