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