将浮点值复制到char数组中

Jam*_*lor 0 c string strcpy strcat

我正在用C写一个TCP套接字来发送我正在处理的项目的位置数据.

到目前为止,一切正常,但我正在努力解决这个看似简单的问题.我正在尝试构建一个将通过套接字发送的JSON字符串.我有一个字符数组(代表字符串)json定义为:

char json[1024];
Run Code Online (Sandbox Code Playgroud)

使用方法原型:

const char* build_json(void);
Run Code Online (Sandbox Code Playgroud)

和方法体:

const char* build_json(void) {
    strcpy(json, "{");
    strcat(json, "\"latitude\":");
    sprintf(json, "%0.5f", latitude);
    strcat(json, "}");
    return json;
}
Run Code Online (Sandbox Code Playgroud)

我知道这latitude是正确定义的,应该是float大约5位小数.

但是,当我打电话时build_json();,38.925034}唯一的回报是什么.为什么会这样?似乎要求sprintf覆盖已经写入的内容json.

谢谢你的帮助!

use*_*520 10

sprintf不会附加到你的字符串; 相反,它会覆盖那里的任何东西.你可以这样做:

sprintf(json + strlen(json), "%0.5f", 213.33f);
Run Code Online (Sandbox Code Playgroud)

但是,说实话,这是一个更好的解决方案:

sprintf(json, "{\"latitude\":%0.5f}", location);
Run Code Online (Sandbox Code Playgroud)

而这个解决方案仍然更好:

snprintf(json, sizeof(json), "{\"latitude\":%0.5f}", location);
json[sizeof(json) - 1] = '\0';
Run Code Online (Sandbox Code Playgroud)

只要json是一个对调用的函数可见的数组snprintf,即在堆栈中的该函数中分配的数组,或全局的数组.如果它char*是你传递给函数的那个,那将会失败,所以要小心.