Неа, мимо. В энциклопедии написано, что
я не имею права менять строки, переданные мне из ECTL_GETSTRING:
Code: Select all
struct EditorGetString
{
int StringNumber;
const char *StringText;
const char *StringEOL;
int StringLength;
int SelStart;
int SelEnd;
};
StringText
Указывает на данные строки. Вы не должны их изменять. Помните, что среди этих данных могут быть нулевые символы.
А в Editor
SetString соответствующие поля не-const, поэтому, например, не проходит такое:
Code: Select all
void setCurrentLine(const std::string& text)
{
EditorSetString setString;
setString.StringNumber = -1;
setString.StringText = text.c_str();
setString.StringEOL = 0;
setString.StringLength = text.size();
FarManager.EditorControl(ECTL_SETSTRING, &setString);
}
Приходится писать
Code: Select all
setString.StringText = const_cast<char*>(text.c_str());
что не есть совсем красиво.
Другими словами, у меня есть строка. Она моя, я хочу, чтобы её без моего ведома никто не менял. Я её пытаюсь передавать по указателю на константу. А ECTL_SETSTRING требует от меня указатель на неконстанту, из чего я могу заподозрить, что FAR попытается мою строку изменить.