Не используйте strcat
и tmp
.Вы пишете бессмысленно слишком сложный и неэффективный код.Вместо этого:
pos+=sprintf(pos,"%f ",cl.snap.ps.origin[0]);
pos+=sprintf(pos,"%f ",cl.snap.ps.origin[1]);
...
Если вы не уверены, что sprintf
не может завершиться ошибкой, вместо непосредственного добавления возвращаемого значения к pos
, вам, вероятно, следует сначала сохранить возвращаемое значение в отдельной переменной int
ипроверьте, что это не -1.
Было бы также лучше использовать snprintf
, чтобы убедиться, что вы не переполняете свой буфер:
size_t cnt, rem=your_buffer_size;
cnt=snprintf(pos, rem,"%f ",cl.snap.ps.origin[0]);
if (cnt>=rem) goto error;
pos+=cnt; rem-=cnt;
cnt=snprintf(pos, rem,"%f ",cl.snap.ps.origin[1]);
if (cnt>=rem) goto error;
pos+=cnt; rem-=cnt;
...
Обратите внимание, что cnt
являетсябеззнаковый тип (size_t
) имеет решающее значение для проверки ошибок работает.