Автомобильный отступ 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++; он просто резервирует пространство, не обращая никакого внимания на то, что уже находится в этом куске памяти.