私はlibsodiumライブラリを使ってペットプロジェクトに取り組んでおり、unsigned char *をchar *に変換するのが私の想像よりも単純ではありませんでした。また、最初にテストがリリースモードで合格していたので混乱していましたが、少し後にデバッグモードで渡されていないことがわかりました。 は、だから私は、次のを思い付いた:それは今のテストに合格している間"unsigned char *"を "char *"(そして文字列)に変換する
std::string string_from_uchar(const unsigned char * c, unsigned long long lc)
{
unsigned char * cc = new unsigned char[lc+1] ;
std::strncpy((char *) cc, (char *) c, lc);
cc[lc] = 0;
char* cr = reinterpret_cast<char *> (cc);
std::string ret(cr);
delete[](cr);
return ret;
}
、私はそれが(例えば、それを行うための正しい方法であれば、誰かがチェックすることができれば感謝された希望のような別の環境でその仕事gccまたはclang?)
'new'と' free() 'を混在させないでください。 –
あなたのテストは全く異なる理由でテストに失敗したことがあり、実装した修正は修正するのではなく、根底にある問題を隠す回避策です。 – dasblinkenlight
πάνταῥεῖ:良いキャッチ! –