3

我遇到了一个程序,该程序使用嵌入式 SQL 从数据库表中获取行,将行数据存储在一个结构中,然后处理该数据并将结果存储在另一个结构中并推送到一个链表。存储获取数据的结构如下:

struct rowstruct {
    char    *first;
    char    *last;
    long    amt;
}   client;

我用来存储处理过的数据(并随后作为我的链表中的一个节点推送)的结构是这样的:

struct mystruct {
        char    *firstN;
        char    *lastN;
        long    total;
    }   data;

我的问题是,每次发生 fetch 循环时,我都需要将 client.first 和 client.last 值复制到 data.firstN 和 data.lastN 中,但我无法让它工作。以下使用赋值运算符似乎只是在复制指针,而不是值:

data.firstN = client.first;
data.lastN = client.last;

如果我在循环的第一次迭代后输出 data.firstN 和 data.lastN,则值看起来是正确的,但在第二次 fetch 迭代之后,我列表中的第一个节点将反映来自第二次 fetch 的值,而不是第一个。

strcpy 将编译,但由于分段错误而在运行时失败,从这里阅读是由于使用了 char*,尽管我认为在使用嵌入式 SQL 获取数据时我不能使用 char[] 或字符串,所以这似乎是一个死胡同。

我敢肯定有办法做到这一点,这对大多数人来说可能很明显,但我不知所措。任何帮助,将不胜感激。

谢谢!

4

1 回答 1

3

如果代码说要复制指针,那正是发生的情况。

可能你想要的是类似的东西

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

有更多的 C++-ish 方法可以做同样的事情,但这应该会让你克服困难。


您不需要重新声明结构。相反,您可以data声明

struct rowstruct data;
于 2012-10-12T18:36:55.747 回答