Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
%s设置为整数时vsnprintf崩溃程序 我写C++中的记录器,为了简化输入行,我使用VSNPROTNF函数来构建日志行< /P> void CLogger::RegManLog(const LogLevel & logLevelMask, char * Format, ...) ... ... va_start(marker_, Format); vsnprintf(buffer_ ,MaxLogBuffSize , Format, marker_) va_end(marker_); printer_ += buffer_; ... ..._C++_Printf - Fatal编程技术网

%s设置为整数时vsnprintf崩溃程序 我写C++中的记录器,为了简化输入行,我使用VSNPROTNF函数来构建日志行< /P> void CLogger::RegManLog(const LogLevel & logLevelMask, char * Format, ...) ... ... va_start(marker_, Format); vsnprintf(buffer_ ,MaxLogBuffSize , Format, marker_) va_end(marker_); printer_ += buffer_; ... ...

%s设置为整数时vsnprintf崩溃程序 我写C++中的记录器,为了简化输入行,我使用VSNPROTNF函数来构建日志行< /P> void CLogger::RegManLog(const LogLevel & logLevelMask, char * Format, ...) ... ... va_start(marker_, Format); vsnprintf(buffer_ ,MaxLogBuffSize , Format, marker_) va_end(marker_); printer_ += buffer_; ... ...,c++,printf,C++,Printf,在我不小心在字符串中输入了一个数字之前,一切都很顺利 整数检验=10; 现在我将显示一个字符串%s,test 尝试添加try-and-catch,但我认为vsnprintf确实有throw,所以它无论如何都会崩溃。 试图从vsnprintf获取返回值,它返回值,而字符串很好,当遇到相同问题时,它崩溃 我能解决这个问题吗 谢谢您可以避免使用printf和friends,而使用std::stringstream或boost::format您可以避免使用printf和friends,而使用std::s

在我不小心在字符串中输入了一个数字之前,一切都很顺利

整数检验=10; 现在我将显示一个字符串%s,test

尝试添加try-and-catch,但我认为vsnprintf确实有throw,所以它无论如何都会崩溃。 试图从vsnprintf获取返回值,它返回值,而字符串很好,当遇到相同问题时,它崩溃

我能解决这个问题吗


谢谢

您可以避免使用printf和friends,而使用std::stringstream或boost::format

您可以避免使用printf和friends,而使用std::stringstream或boost::format

嗯,当传递给printf和family时,%s格式化程序在这里作为-finally const-char*指针的占位符

发生的情况是,您的整数被读取为指针,并且示例中的内存地址10很可能无效。

好的,当传递给printf和family时,%s格式化程序在这里作为-finally const-char*指针的占位符

发生的情况是,您的整数被读取为指针,并且示例中的内存地址10很可能无效

%s希望得到一个char*。当你通过10,它就像一个地址,去那里,并杀死你的程序。 如果要打印整数,请使用%d。有关更多信息,请参阅 在C++中,最好使用其他方法来完成你所需要的,比如STD:: %s希望得到一个char*。当你通过10,它就像一个地址,去那里,并杀死你的程序。 如果要打印整数,请使用%d。有关更多信息,请参阅 在C++中,最好使用其他方法来完成你所需要的,比如STD::

你在用什么编译器?如果是gcc,您可以告诉它您的vararg是一个类似printf的字符串,并将执行额外的格式检查并向您发出警告。检查@user1693857上的“format”函数属性,我打赌您在使用它时没有启用任何警告…现在有人向上投票。。。坦白说,令人震惊的是……H2CO3-错误确实会发生,当他们发生时,你要处理他们,不要让应用程序崩溃。@user1693857 crush是当你爱上某人时。你要找的词是crash。除此之外,这就是为什么至少要使用-Wall编译代码。更好,-Wall-Wextra-Werror-pedantic.你在用什么编译器?如果是gcc,您可以告诉它您的vararg是一个类似printf的字符串,并将执行额外的格式检查并向您发出警告。检查@user1693857上的“format”函数属性,我打赌您在使用它时没有启用任何警告…现在有人向上投票。。。坦白说,令人震惊的是……H2CO3-错误确实会发生,当他们发生时,你要处理他们,不要让应用程序崩溃。@user1693857 crush是当你爱上某人时。你要找的词是crash。除此之外,这就是为什么至少要使用-Wall编译代码。更好,-Wall-Wextra-Werror-pedantic。我相信boost::format忽略了格式字符并使用了参数的类型。我在boost中使用了几个模块,但出于复杂的原因,我尽量避免使用它。stringstream,也许我会用这个。但有没有一种方法可以在压榨前抓住?似乎从来没有人解释过为什么他们不能使用boost。我认为格式只是标题,所以如果您已经在使用另一个boost库,格式不会增加任何构建复杂性。对于意外退出的程序来说,正确的术语是crash,而不是crash。不,没有简单的方法来确定参数是错误的类型,或者是正确的类型,但是如果没有使用vsnprintf的解决方案,则指向导致崩溃的垃圾,我猜boost或stringstream必须这么做我相信boost::format会忽略格式字符并使用参数的类型。我在boost中使用了几个模块,但出于复杂的原因,我尽量避免使用它。stringstream,也许我会用这个。但有没有一种方法可以在压榨前抓住?似乎从来没有人解释过为什么他们不能使用boost。我认为格式只是标题,所以如果您已经在使用另一个boost库,格式不会增加任何构建复杂性。对于意外退出的程序来说,正确的术语是crash,而不是crash。不,没有简单的方法来确定参数是错误的类型,或者是正确的类型,但是如果没有使用vsnprintf的解决方案,则指向导致崩溃的垃圾,我猜boost或stringstream必须这样做我知道%s需要一个字符*,但有时字符串格式不正确,在这种情况下,我想打印格式不正确的字符串,但我不知道%s需要一个字符*,但有时,字符串格式不正确,在本例中,我想打印格式不正确的字符串,而不是Crush。我提到过这是一个
字符串格式错误,这就是为什么%s得到一个整数,问题是我希望系统打印坏字符串,而不是crush。我说过这是一个格式错误的字符串,这就是为什么%s得到一个整数,问题是我希望系统打印坏字符串,而不是crush