sprintf_s的用法,哪里写错了吗?

十八道胡同 2018-09-05 12:29:26

下面的buffer 是可以正常输出的,但是后面的result 就报内存错误,大家帮忙看下是哪里的问题。
int _tmain(int argc, _TCHAR* argv[])
{
char buffer[200], s[] = "computer", c = 'l';
int i = 35, j;
float fp = 1.7320534f;
j = sprintf_s(buffer, 200, " String: %s\n", s);
j += sprintf_s(buffer + j, 200 - j, " Character: %c\n", c);
j += sprintf_s(buffer + j, 200 - j, " Integer: %d\n", i);
j += sprintf_s(buffer + j, 200 - j, " Real: %f\n", fp);

cout << buffer <<endl;

char result[1024];
int _vehicleClass = 10, RoadId = 10, StationID = 10, _version = 10, _wayTypeNo = 1, _money = 10, _miles=10;
string split_road_comb = "", split_miles_comb = "", split_money_comb = "", split_start_station_comb = "", split_end_station_comb = "",
rfid_flags = "";
sprintf_s(result, 1024, "%d => %d,%d,%d,%d => %d,%d,%d,%d,%s,%s,%s,%s,%s,%s", _vehicleClass, RoadId, StationID, RoadId, StationID, _version, _wayTypeNo, _money, _miles, split_road_comb, split_miles_comb, split_money_comb, split_start_station_comb, split_end_station_comb, rfid_flags);
cout << result << endl;
}
...全文
435 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
十八道胡同 2018-09-05
  • 打赏
  • 举报
回复
引用 2 楼 srhouyu 的回复:
sprintf_s()要的字符串是char*型的,而你传了一堆std::string过去。需要split_road_comb.c_str()、split_miles_comb.c_str()等等。


谢谢回复,加上.c_str() 就好了。
srhouyu 2018-09-05
  • 打赏
  • 举报
回复
引用 1 楼 u014444402 的回复:
string的问题吧, 要转成指针.xxxx.data()


在C++11之前,data()不保证是'\0'结尾,不过C++11之后data()和c_str()等价了。
srhouyu 2018-09-05
  • 打赏
  • 举报
回复
sprintf_s()要的字符串是char*型的,而你传了一堆std::string过去。需要split_road_comb.c_str()、split_miles_comb.c_str()等等。
灌水号 2018-09-05
  • 打赏
  • 举报
回复
string的问题吧, 要转成指针.xxxx.data()

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧