Нужна помощь в копировании c-строк из встроенной выборки SQL в другую c-строку в отдельной структуре

Я столкнулся с программой, которая использует встроенный 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, поэтому это похоже на тупик.

Я уверен, что есть способ сделать это, и это, вероятно, очевидно для большинства здесь, но я в растерянности. Любая помощь будет оценена.

Спасибо!

3

Решение

Если код говорит скопировать указатель, это именно то, что происходит.

Вероятно, вы хотите что-то вроде

data.firstN = strdup (client.first);
data.lastN = strdup (client.last);

Существует больше способов сделать то же самое в C ++, но это поможет вам преодолеть все трудности.


Вам не нужно повторно объявлять структуру. Вместо этого вы можете объявить data с

struct rowstruct data;
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]