如何将字符数组转换为字符串?

时间:2019-04-24 02:52:47

标签: c++

我正在编写一个程序以生成一个随机的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位数字作为字符串。

3 个答案:

答案 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;
}