c - 结构上的 memcpy 错误

标签 c struct memcpy

我在使用 memcpy 时遇到以下错误。它不会给出编译错误,但不会给出我想象的结果。我以前从未使用过 memcpy,所以我确定我犯了一个简单的错误。我查看了以前的问题,但找不到具有结构的问题。我可以在自变量上使用 memcpy,但不能在结构上使用。

如果有人能指出我的错误那就太好了。

#include <stdio.h>
#include <string.h>


int main() {
 struct st{
 char c1[12];
 char c2[32];
 char c3[3];
 char c4[7];
 char c5[13];
 char c6[5];
 char c7[10];
 };
 struct st s;
 char s1[] = "part number";
 char s2[] = "j9uijd9d09fj";
 char s3[] = "abc";
 char s4[] = "seven";
 char s5[] = "aaaaaaaa";
 char s6[] = "ptype";
 char s7[] = "user";
 memcpy(s.c1,s1,sizeof(s.c1));
 memcpy(s.c2,s2,sizeof(s.c2));
 memcpy(s.c3,s3,sizeof(s.c3));
 memcpy(s.c4,s4,sizeof(s.c4));
 memcpy(s.c5,s5,sizeof(s.c5));
 memcpy(s.c6,s6,sizeof(s.c6));
 memcpy(s.c7,s7,sizeof(s.c7));
 printf("%s\n",s.c1);
 printf("%s\n",s.c2);
 printf("%s\n",s.c3);
 printf("%s\n",s.c4);
 printf("%s\n",s.c5);
 printf("%s\n",s.c6);
 printf("%s\n",s.c7);
 return 0;
}

我得到的输出:

part number
j9uijd9d09fj
abcseven
seven
aaaaaaaa
ptypeuser
user

谢谢!!!

最佳答案

将结构中 c3 的大小更改为 4 并将 c6 更改为 6 以允许 NULL 终止符。

struct st{
    char c1[12];
    char c2[32];
    char c3[4]; /* putting 'abc' which is 4 chars */
    char c4[7];
    char c5[13];
    char c6[6]; /* putting 'ptype' which is 6 chars */
    char c7[10];
};

关于c - 结构上的 memcpy 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12459436/

相关文章:

c - 嵌入式 Linux : Reading bytes from serial port too slow for quicker transfer

c - 在 C 中使用指针时遇到问题

c - 结构体数组的结构体

连接两个字符串数组?

c++ - 如果我用memcpy函数复制一个数组,可能会有什么后果: bottlenecks and perfomance changes?

c - 由于 strcpy 和 strcat 导致的段错误

C:为什么 size_t 不是 C 关键字?

c - 在 C 中动态创建单链表

c - 使用 mmap 共享结构数组

c - 如何在C中将数组拆分为两个数组