Автомобильный отступ Pygtkscintilla

Я пытаюсь перевести код на С ++, и я не могу понять, что такое "char linebuf[1000]", могу ли я каким-то образом перевести это на python или объяснить, что такое linebuf. Спасибо!:) Взято с http://www.scintilla.org/ScintillaUsage.html

if  (ch  ==  '\r'  ||  ch  ==  '\n')  {
     char  linebuf[1000];
     int  curLine  =  GetCurrentLineNumber();
     int  lineLength  =  SendEditor(SCI_LINELENGTH,  curLine);
     //Platform::DebugPrintf("[CR] %d len = %d\n", curLine, lineLength);
     if  (curLine  >  0  &&  lineLength  <=  2)  {
     int  prevLineLength  =  SendEditor(SCI_LINELENGTH,  curLine  -  1);
     if  (prevLineLength  <  sizeof(linebuf))  {
         WORD  buflen  =  sizeof(linebuf);
         memcpy(linebuf,  &buflen,  sizeof(buflen));
         SendEditor(EM_GETLINE,  curLine  -  1,
                    reinterpret_cast<LPARAM>(static_cast<char  *>(linebuf)));
         linebuf[prevLineLength]  =  '\0';
         for  (int  pos  =  0;  linebuf[pos];  pos++)  {
             if  (linebuf[pos]  !=  ' '  &&  linebuf[pos]  !=  '\t')
                 linebuf[pos]  =  '\0';
         }
         SendEditor(EM_REPLACESEL,  0,  reinterpret_cast<LPARAM>(static_cast<char  *>(linebuf)));
     }
}

1 ответ

Решение

Это буфер для строки входного текста, типа char[1000], т.е. массив из 1000 char элементы (которые на самом деле являются байтами, потому что C++ основан на C, что, в свою очередь, предшествует всей идее кодировки символов).

Если бы мы действительно хотели буквальный перевод алгоритма, то наиболее близкое соответствие в Python - это, вероятно, что-то вроде array.array('B', [0]*1000), Однако это инициализирует массив Python, в то время как массив C++ неинициализирован - на самом деле нет способа пропустить эту инициализацию в C++; он просто резервирует пространство, не обращая никакого внимания на то, что уже находится в этом куске памяти.

Другие вопросы по тегам