Нужна помощь в копировании 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, поэтому это похоже на тупик.

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

Спасибо!

1 ответ

Решение

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

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

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

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


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

struct rowstruct data;
Другие вопросы по тегам