C++ 简单字符串处理sprintf

C++ 简单字符串处理sprintf,c++,string,printf,C++,String,Printf,我简直不敢相信我做不好!有人请帮忙! 这表示该词未经草签就被使用(是否需要?): intmain(intargc,char*argv[]) { 字符*字; sprintf(单词,“%d”,12); std::cout您需要使用分配的内存对其进行初始化 char word[20]; 或 将其初始化为NULL将使其在函数尝试在此地址写入时崩溃。不初始化它也将是未定义的行为,因为地址将是垃圾。这两个代码段都是未定义的行为 在第一种情况下,指针word未初始化,因此其值是不确定的(并且似乎是随机的),

我简直不敢相信我做不好!有人请帮忙! 这表示该词未经草签就被使用(是否需要?):

intmain(intargc,char*argv[])
{
字符*字;
sprintf(单词,“%d”,12);

std::cout您需要使用分配的内存对其进行初始化

char word[20];


将其初始化为NULL将使其在函数尝试在此地址写入时崩溃。不初始化它也将是未定义的行为,因为地址将是垃圾。

这两个代码段都是未定义的行为

在第一种情况下,指针
word
未初始化,因此其值是不确定的(并且似乎是随机的),因此当使用它写入数据时,您不知道它将写入何处

第二个将始终写入地址零,这也是未定义的行为


解决这个问题的方法是记住你使用的是C++,它有:

或者,如果您将数字作为要使用的整数,请查看:

int值=12;
// ...
std::ostringstream os;

os您将
word
声明为指针:指向什么? 如果您需要一个字符串,但仍要使用
sprintf
,则必须声明其长度:

char word[20]; // twenty bytes including string terminator \0

这种固定长度语法很容易出错,现在已经过时了:请参阅@Joachim Pileborg answer,以更好地使用
C++

+1中的字符串。应该补充的是
sprintf
被认为是不安全的()
char word[20];
char* word = new char[20];
std::string word;
word = "12";
int value = 12;

// ...

std::ostringstream os;
os << value;

std::string word = os.str();
char word[20]; // twenty bytes including string terminator \0