Index: src/pdep.cc =================================================================== --- src/pdep.cc (revision 1862) +++ src/pdep.cc (working copy) @@ -473,7 +473,7 @@ } #ifdef USE_AS_STANDALONE const sentence_t* parser::parse (const char* sent, size_t len) { - _s->clear (); + _s->clear (true); if (! len) len = std::strlen (sent); #ifdef USE_UNI_POS char ret[IOBUF_SIZE]; @@ -497,7 +497,7 @@ { return parse (sent, len)->print_tostr (_opt.input, _opt.verbose < 0); } #endif const sentence_t* parser::parse_from_postagged (char* result, size_t len) { - _s->clear (); + _s->clear (true); if (! len) len = std::strlen (result); // char *r = result + len - 4; @@ -516,7 +516,7 @@ const char* parser::parse_from_postagged_tostr (char* result, size_t len) { return parse_from_postagged (result, len)->print_tostr (_opt.input, _opt.verbose < 0); } const sentence_t* parser::read_result (char* result, size_t len) { - _s->clear (); + _s->clear (true); if (! len) len = std::strlen (result); // char *r = result + len - 4; Index: src/pdep.h =================================================================== --- src/pdep.h (revision 1862) +++ src/pdep.h (working copy) @@ -696,10 +696,11 @@ delete chunk0; delete token0; } - void clear () { + void clear (bool reset = false) { if (chunk_num) do { _chunks[--chunk_num].clear (); } while (chunk_num); token_num = 0; + if (reset) _ptr = &_res[0]; } chunk_t* chunk (const int i) const { return i >= 0 && i < chunk_num ? &_chunks[i] : chunk0; } token_t* token (const int i) const { return i >= 0 && i < token_num ? &_tokens[i] : token0; } @@ -808,6 +809,7 @@ } } std::memcpy (_ptr, "EOS\n", 4); _ptr += 4; + *_ptr = '\0'; return &_res[0]; } void print (const input_t in, bool prob) {