char buf[32] = {0};
sprintf(buf, "%s,%d", "test", 100);
char out[32] = {0};
int i = 0;
sscanf(buf, "%s,%d", out, &i);
这段代码,开始以为会正常运行,结果却是crash。
sscanf在解析%s的时候遇到空格、指标符号、\n才会停止解析,而这个%s后面的逗号基本上是一个摆设。上面这行out的数据就是“test,100”,这直接导致i解析失败。
所以,遇到这种情况,可以用
char buf[32] = {0};
sprintf(buf, "%s %d", "test", 100);
char out[32] = {0};
int i = 0;
sscanf(buf, "%s %d", out, &i);
如果字符串用空格或者指标符或者\n,也可以用这种
char buf[32] = {0};
sprintf(buf, "%s,%d", "test test", 100);
char out[32] = {0};
int i = 0;
sscanf(buf, "%[^,],%d", out, &i);