Предположим, у меня есть файл. Я прочитал все байты в unsigned char buffer. Оттуда я пытаюсь прочитать строку c (нуль завершен), не зная ее длины.Чтение CString из буфера с неизвестной длиной?
Я попытался следующие:
char* Stream::ReadCString()
{
char str[0x10000];
int len = 0;
char* pos = (char*)(this->buffer[this->position]);
while(*pos != 0)
str[len++] = *pos++;
this->position += len+ 1;
return str;
}
Я думал, что я мог бы заполнить каждый символ в массиве ул как я прошел, проверяя, если символ был нулем или нет. Это не работает. Любая помощь?
this-> буфер = массив байтов
this-> положение = положение в массиве
Существуют ли какие-либо другие методы, чтобы сделать это? Я думаю, я мог бы запустить его по адресу фактического буфера: str[len++] = *(char*)(this->buffer[this->position++])
?
Update: Моя новая функция:
char* Stream::ReadCString()
{
this->AdvPosition(strlen((char*)&(this->buffer[this->position])) + 1);
return (char*)&(this->buffer[this->position]);
}
и называя его:
printf("String: %s\n", s.ReadCString()); //tried casting to char* as well just outputs blank string
Файл примера:
Вы пытаетесь вернуть локальную переменную – Alexis
правильно, например: printf ("% s \ n", Stream.ReadCString()); – MysteryDev
Не уверен, что понимаете, пусть ваш буфер [0,0,0, 'H', 'E', 'L', 'L', O ', 0] и позиция 3, почему вы не возвращаетесь & (буфер [позиция])?и позиция + = strlen (& buffer [position]) – Alexis