Strtol и Glib Buffers вызывают сбой приложения

Я пытаюсь получить данные, прочитанные из сокета TCP, с помощью метода g_io_channel_read_chars и преобразовать их в длинное целое число. Я пытался использовать strtol, atoi, не приводить ScanLine в качестве указателя gchar, обращаться к первой переменной ScanLine с помощью ScanLine[0], объявлять FilterAmount по-разному, и, несмотря на это, мое приложение все еще падает в этой строке. Любые идеи?

static gchar ScanLine[9640];
long int FilterAmount;

g_io_channel_read_chars (source, (gchar *) ScanLine,1,&BytesRead,&GlibError);
if (BytesRead != 1){ 
    return TRUE;
} 

printf("This is my string: %s\n", ScanLine);
FilterAmount = strtol(ScanLine, NULL, 10); 

Вывод оператора printf равен «2».


person Scott James Walter    schedule 19.08.2014    source источник


Ответы (1)


strtol() принимает строковый аргумент C: это означает, что массив символов должен заканчиваться NULL. Ваш, скорее всего, нет. Вы должны либо добавить терминатор после последнего прочитанного байта, либо самостоятельно разобрать цифры (поскольку вы знаете, когда прекратить синтаксический анализ).

person Jussi Kukkonen    schedule 20.08.2014