C++ 需要帮助将c字符串从嵌入式SQL fetch复制到单独结构中的另一个c字符串吗

C++ 需要帮助将c字符串从嵌入式SQL fetch复制到单独结构中的另一个c字符串吗,c++,struct,char,cstring,embedded-sql,C++,Struct,Char,Cstring,Embedded Sql,我遇到了一个程序,它使用嵌入式SQL从数据库表中获取行,将行数据存储在一个结构中,然后将数据进行处理,结果存储在另一个结构中并推送到一个链表中。存储获取数据的结构如下所示: struct rowstruct { char *first; char *last; long amt; } client; 我用来存储处理后的数据(并随后作为链接列表中的节点推送)的结构如下所示: struct mystruct { char *fir

我遇到了一个程序,它使用嵌入式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,则值看起来是正确的,但在第二次提取迭代之后,列表中的第一个节点将反映第二次提取的值,而不是第一次提取的值

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

我相信有一种方法可以做到这一点,这对这里的大多数人来说可能是显而易见的,但我却不知所措。任何帮助都将不胜感激


谢谢

如果代码说要复制指针,那就是实际情况

也许你想要的是类似于

data.firstN = strdup (client.first);
data.lastN = strdup (client.last);
有更多的C++风格的方法来做同样的事情,但这应该会让你渡过难关


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

struct rowstruct data;

您是否为
mystruct
char*
s分配了内存?ie
data.firstN=malloc(sizeNeeded)
-可能通过
strlen
-然后
strcpy
注意我更喜欢
strncpy
或另一种安全的选择(
strcpy
?)
mystruct
似乎是多余的,但很抱歉与mystruct混淆。还有比上面显示的更多的东西。。。我不知道我在帖子里说的有多混乱。@AK4749-见下面我的评论。现在我明白我做错了什么,建议的解决方案非常简单,尽管您的评论让我更清楚地知道如何为char*分配内存。谢谢如果您使用
strdup
复制字符串,请注意,完成后必须
释放它。通常,这是用C++中的代码>删除>代码>,但这是一个C函数,它分配给代码< MalCal >而不是<代码>新< /COD>沃利克-谢谢。。。我的教授建议的解决方案是将firstN和lastN声明为char数组,例如char firstN[30]。我担心分配不必要的内存(或者不够),但由于数据来自预定义的db字段,他说可以使用固定的字符数组大小。我想试试你的建议,看看效果如何。至于重新声明结构,mystruct有其他成员不是原始结构的一部分。@Geoff-感谢您指出了其中的内存管理部分。我需要多花一点时间,真正尝试更好地掌握程序中的所有内容。我对编程相当陌生,不精通任何一门语言。这个特殊的任务让我使用C代码(因为嵌入的SQL),但是我对C++更熟悉,所以我认为我的代码现在有点像弗兰肯斯坦。一旦我完成了,也许我可以把它添加到这个帖子中,以供评论/建议?最好的学习方法似乎是让别人指出问题和更喜欢的方法。