Проблема должна заключаться в том, как вы читаете строку. Поскольку вы комментируете, что читаете с fgets()
, я предполагаю, что вы работаете на 32-битной машине и у вас есть какой-то код, похожий на:
char buffer[128];
if (fgets(&buffer, sizeof(&buffer), stdin))
{
lineResponse r = parseLine(buffer);
...
}
Существуют и другие смутно похожие методы:
char *buffer;
if (fgets(buffer, sizeof(buffer), stdin))
...
Здесь происходит то, что вы задаете неправильный размер (и неправильный адрес) для fgets()
, и он видит размер всего 4, что означает, что он может хранить только 3 символа плюс завершающий NUL '\0'
.
Правильный код может быть:
char buffer[128];
if (fgets(buffer, sizeof(buffer), stdin))
{
lineResponse r = parseLine(buffer);
...
}
Или:
char *buffer = malloc(2048);
// error check memory allocation!
if (fgets(buffer, 2048, stdin))
...
Теперь код виден ...
Ваш код отображается как:
char *currentLine = "";
//Loop through the lines
while(fgets(currentLine,sizeof(input),input)){
response = parseLine(currentLine);
Это действительно соответствует (более или менее) гипотезе char *buffer;
, которую я выдвинул. У вас есть добавленный твик, который вы используете sizeof(input)
, где вы объявляете FILE *input;
. Вам нужно адаптировать мою вторую предложенную альтернативу, если вы сохраняете currentLine
как char *
, или в качестве альтернативы (проще, потому что нет динамически выделенной памяти для утечки), используйте:
char currentLine[2048];
//Loop through the lines
while (fgets(currentLine, sizeof(currentLine), input))
{
response = parseLine(currentLine);
...
}