Hi,
The following code returns a NULL pointer for inchikey:
int mol = indigoLoadMoleculeFromString("C1CCCCC1");
const char* inchi = indigoInchiGetInchi(mol); // InChI=1S/C6H12/c1-2-4-6-5-3-1/h1-6H2
const char* inchik = indigoInchiGetInchiKey(inchi); // NULL pointer
The problem seems to be indigoInchiGetInchiKey method of indigo_inchi_api.cpp file. The passed in inchi_string is somehow assigned to self.tmp_string which is cleared for output in IndigoInchi::InChIKeymethod of indigo_inchi_core.cpp.
Regards,
Abhi
int mol = indigoLoadMoleculeFromString("C1CCCCC1");
if(mol < 0 ) {
printf("%s\n", indigoGetLastError());
exit(-1);
}
const char* inchi = indigoInchiGetInchi(mol); // InChI=1S/C6H12/c1-2-4-6-5-3-1/h1-6H2
if(inchi == 0) {
printf("%s\n", indigoGetLastError());
exit(-1);
}
printf("%s\n", inchi);
const char* inchik = indigoInchiGetInchiKey(inchi); // NULL pointer
if (inchik == 0) {
printf("%s\n", indigoGetLastError());
exit(-1);
}
printf("%s\n", inchik);
InChI=1S/C6H12/c1-2-4-6-5-3-1/h1-6H2
indigo-inchi: INCHIKEY_INVALID_INCHI_PREFIX
indigoInchiGetInchiKey() funciton. Each returned string
should be copied! Because, it will be lost otherwise. indigoGetLastError() also uses tmp_bufferstatic void errorHandling(const char* message, void* context) {
throw Exception(message);
}
.......
try {
qword id = indigoAllocSessionId();
indigoSetSessionId(id);
indigoSetErrorHandler(errorHandling, 0);
int mol = indigoLoadMoleculeFromString("C1CCCCC1");
std::string inchi = indigoInchiGetInchi(mol); // copy inchi string
std::cout << inchi << std::endl;;
std::string inchik = indigoInchiGetInchiKey(inchi.c_str()); // pass inchi string, copy inchikey
std::cout << inchik << std::endl;;
catch(Exception& ex) {
std::cout << ex.message();
}
InChI=1S/C6H12/c1-2-4-6-5-3-1/h1-6H2
XDTMQSROBMDMFD-UHFFFAOYSA-N