这个char数组到std :: string转换有什么问题?

And*_*eas 1 c++ string

我正在尝试将一个char数组转换为一个数组std::string,但我只能在数据中得到喋喋不休std::string.怎么了?

char char_buff[40];
sprintf_s(char_buff, 40, "test" );
printf("%s\n", char_buff); // prints "test"

std::string str(char_buff);
printf("%s\n", str); // prints random nonsense
Run Code Online (Sandbox Code Playgroud)

Jer*_*fin 12

传递一个std::stringprintf给未定义的行为.

当您尝试打印string实例时,请尝试使用std::cout:

char char_buff[40];
sprintf_s(char_buff, 40, "test" );
std::cout << char_buff << "\n";

std::string str(char_buff);
std::cout << str << "\n";
Run Code Online (Sandbox Code Playgroud)

  • @NeilKirk:不,我不应该.虽然可以*在C++中使用`printf`,但这几乎不是一个好主意. (7认同)
  • @NeilKirk Judgmental是亲戚.`printf`是如此完全破碎,我甚至在C中也避免它. (3认同)
  • 这是非常有判断力的.printf仍然是C++的一部分.我没有说删除你对cout的建议. (2认同)
  • @Ashot:cout与printf的速度差异很大.曾经有一段时间,iostream一直比C风格的I/O慢得多,至少值得考虑.那是几十年前的事了. (2认同)