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*是你传递给函数的那个,那将会失败,所以要小心.
| 归档时间: |
|
| 查看次数: |
1558 次 |
| 最近记录: |