Я работаю над заданием Uni здесь, и я столкнулся с проблемой. Я пытаюсь сохранить ввод строки в точке внутри структуры, используя цикл for. Позже я намерен использовать указатель на место, где были сохранены данные, для извлечения строки. Теперь проблема в том, что по мере того, как я продвигаюсь внутри цикла for, адрес точки также меняется. Этот код:
printf("B: %p\n", txt->point);
for(i = 0; i < input_sz; i++)
{
txt->point[i] = input[i];
}
printf("A: %p\n", txt->point);
дает вывод:
B: 0x7fc111803200
A: 0x7fc111803265
где B — значение до, а A — значение после копирования.
Любая помощь в отладке будет очень признательна!
РЕДАКТИРОВАТЬ: Вот еще код:
Структура:
struct text_storage {
char* start;
char* point;
char* end;
} typedef text_t;
Функция инициализации:
text_t* text_init(void *memory, size_t size)
{
text_t* to_return;
if(size < sizeof(text_t))
{
return NULL;
}
to_return = (text_t*) memory;
to_return->start = to_return;
to_return->end = to_return->start + size;
to_return->point = to_return->start;
printf("Start: %p, point: %p, end: %p, end-start: %d\n", to_return->start, to_return->point, to_return->end, (to_return->end - to_return->start));
return to_return;
}
Метод сохранения текста, в котором возникает ошибка:
int text_store_entry(text_t *txt, const char *input, size_t input_sz)
{
int to_return;
char* begin = txt->point;
int i;
if(input_sz > (txt->end - txt->point))
{
return -1;
}
printf("Start: %p, point: %p, end: %p, end-start: %d\n", txt->start, txt->point, txt->end, (txt->end - txt->start));
printf("B: %p\n", txt->point);
for(i = 0; i < input_sz; i++)
{
txt->point[i] = input[i];
}
printf("A: %p\n", txt->point);
}
Основная функция (только в целях тестирования):
int main(int argc, char* argv[])
{
void* memory = malloc(10000);
char* a = "hei pa deg din trekkbasun";
text_t* txt;
int memoverwritten;
txt = text_init(memory, 10000);
memoverwritten = text_store_entry(txt, a, (size_t)26);
printf("got through\n");
return 0;
}
text_store_entry()
? - person Grijesh Chauhan   schedule 21.09.2013to_return->start = to_return;
выглядит неправильноstart
является указателемchar*
, аto_return
имеет типtext_t*
. - person Grijesh Chauhan   schedule 21.09.2013void* memory = malloc(10000);
неправильно, должно бытьvoid* memory = malloc(10000 * sizeof text_t);
даже тогда много ошибок. и10000
не лучший выбор. - person Grijesh Chauhan   schedule 21.09.2013