Я столкнулся с программой, которая использует встроенный SQL для извлечения строк из таблицы базы данных, сохраняет данные строк в структуре, а затем обрабатывает эти данные, сохраняя результаты в другой структуре и помещая в связанный список. Структура, в которой хранятся данные выборки, выглядит следующим образом:
struct rowstruct {
char *first;
char *last;
long amt;
} client;
и моя структура, которую я использую для хранения обработанных данных (и, следовательно, push как узел в моем связанном списке), выглядит следующим образом:
struct mystruct {
char *firstN;
char *lastN;
long total;
} data;
Моя проблема заключается в том, что при каждом цикле выборки мне нужно скопировать значения client.first и client.last в data.firstN и data.lastN, но я не могу заставить его работать. Следующее, используя оператор присваивания, просто копирует указатель, а не значение:
data.firstN = client.first;
data.lastN = client.last;
Если я выведу data.firstN и data.lastN после первой итерации моего цикла, значения будут правильными, но после второй итерации выборки первый узел в моем списке будет отражать значения второй выборки, а не первой.
strcpy скомпилируется, но завершается с ошибкой во время выполнения из-за ошибки сегментации, что при чтении здесь связано с использованием char *, хотя я не думаю, что могу использовать char [] или строку при извлечении данных с использованием встроенного SQL, поэтому это похоже на тупик.
Я уверен, что есть способ сделать это, и это, вероятно, очевидно для большинства здесь, но я в растерянности. Любая помощь будет оценена.
Спасибо!
Если код говорит скопировать указатель, это именно то, что происходит.
Вероятно, вы хотите что-то вроде
data.firstN = strdup (client.first);
data.lastN = strdup (client.last);
Существует больше способов сделать то же самое в C ++, но это поможет вам преодолеть все трудности.
Вам не нужно повторно объявлять структуру. Вместо этого вы можете объявить data
с
struct rowstruct data;
Других решений пока нет …