va_arg(ap,char*)
возвращает значение типа char*
.То есть это указатель на char
.Но вы пытаетесь сохранить значение char*
в том месте, на которое оно указывает.Я думаю, что вы действительно хотите скопировать символы, которые вы извлекли из команды, с strcpy
или memcpy
или чем-то в этом роде.
Кстати, если вы сделаете это, то ваш парсер - простонапример, функции scanf
, если они используются неосторожно - будут уязвимы для переполнения буфера, если его попросят проанализировать что-то, содержащее аргументы, которые слишком длинны для переменной, в которой они хранятся. Но это отдельная проблема, и она может или можетне будет серьезной проблемой в зависимости от остальной части вашего кода.
(Возможно, вместо этого вы намеревались скопировать (указатель) значение parsed_text
вместо копирования символов. Но тогда у вас есть другая проблема: id
и offset
не являются переменными указателя, поэтому вы не могли бы сделать это, даже если бы захотели.)
Другие проблемы:
Я не вижу выделенной памяти дляparsed_text
, но трудно понять, не видя определения substr
.Это функция или макрос?Что именно он должен делать?На самом деле, если substr
выделяет память, у вас есть другая проблема, потому что ничто не освобождает ее снова.
Если ваша команда ввода имеет неправильный синтаксис, ваш цикл while
может завершиться с концастрока, которая зацикливается до тех пор, пока она не попытается получить доступ к памяти, которой ей не разрешеноЭто произойдет, например, если вы позвоните ParseCommand("GO_PLAY","GO_PLAY(broken",2,&id,&offset)
.