我已经发现了几个问题,但是没有一个问题能帮助我解决这个问题。我有以下内容。
struct general_calibration_t {
double pressure_span;
double pressure_offset;
double steam_temperature_offset;
};
struct general_t {
struct general_calibration_t calibration;
};
int generateGenericJSON(string* str, const char* json, ...) {
char* tmp = (char*)malloc(2048);
if (tmp == NULL)
goto fail;
va_list ap;
va_start(ap, json);
const int amount = snprintf(tmp, 2048, json, ap);
va_end(ap);
if (amount >= 2048 || amount < 0)
goto release;
string_new_value(str, tmp, amount);
free(tmp);
return 0;
release:
free(tmp);
fail:
return 1;
}
通过以下方式调用:
struct general_t data;
data.calibration.pressure_offset = 1.0;
data.calibration.pressure_span = 34.8;
data.calibration.steam_temperature_offset = 20.0;
string calibrationStr;
generateGenericJSON(&calibrationStr,
"\"Calibration\":{\"PressureSpan\":%.3f,\"PressureOffset\":%.3f,\"SteamTemperatureOffset\":%.3f}",
data.calibration.pressure_span,
data.calibration.pressure_offset,
data.calibration.steam_temperature_offset);
我的输出如下:
"Calibration":{"PressureSpan":0.000,"PressureOffset":0.000,"SteamTemperatureOffset":-92559631349317830736831783200707727132248687965119994463780864.000}
[va_list
传递到snprintf
时出现错误。如果我使用va_arg
浏览功能generateGenericJSON
中的列表,则数据正确。我尝试将va_list
作为指针传递,但得到了相同的无效数据。将此va_list
传递给snprintf
时,我做错了什么?
将这个va_list传递给snprintf时,我做错了什么?
您想使用vsnprintf()
而不是vsnprintf()
。
跟随dash-o的snprintf()
:尝试避免(可能的)spagetti代码。
处理不同成功/失败案例的可能方法是:
comment