Следующий вызов sprintf
сбой при компиляции для арки i386. используя Android NDK. Я попытался скомпилировать как GCC, так и clang, и результат будет таким же. Я использую android-ndk-r10e
(с APP_STL установлен в gnustl_shared
с GCC, c++_shared
с clang). Он работает как (I?), предназначенный для компиляции для ARM с той же конфигурацией, и, кроме того, когда я компилирую для i386 Linux с GCC 5.2.sprintf не работает, когда формат содержит символы, отличные от ASCII
int n = sprintf(buf, "\xc0%s", "test"); // n == 0, strlen(buf) == 0
После вызова buf
пуст, а не содержащий ожидаемую последовательность обугленного «\ xc0test». sprintf
, кажется, игнорирует все после первого символа, отличного от ASCII. Следующий код пишет «тест» на buf
, оставляя последние байты:
sprintf(buf, "%s\xc0", "test"); // strlen(buf) == 4
С другой стороны, это работает отлично:
sprintf(buf, "%s", "test\xc0"); // strlen(buf) == 5
Я озадачен.
Это отлично сработало для меня. Я вижу, что вы являетесь создателем CrystaX, поэтому большое вам спасибо. 'stdlib.h' не содержал' labs', но это было тривиально для исправления. – user1421750
Хмм, на самом деле 'stdlib.h' содержит определение' labs'. Если у вас возникли проблемы с этим, не стесняйтесь сообщать об ошибке с минимальным воспроизводимым случаем в нашем трекере проблем - https://tracker.crystax.net/projects/ndk. –