指向结构argv赋值的指针

时间:2013-02-28 08:45:37

标签: c struct segmentation-fault memcpy argv

我一直在尝试将argv[x]分配给变量指向的结构。 我编写了以下代码并获得了Segmentation故障,我知道这是一个内存违规。我不明白我犯了什么错误。 这是代码:

#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
typedef struct somestruct {
   char name[20];
   char surname[20];
   char misc[4056];
} somestruct;


int
main(int argc, char *argv[])
{
   somestruct *pvar;
   pvar = malloc(sizeof(somestruct));
   if (pvar==NULL)
      printf("malloc failed with: %s\n", strerror(errno));
   pvar = (somestruct *)  memset(pvar, 0, sizeof(somestruct));

   memcpy((char *) &(pvar->name), argv[1], 20);
   memcpy((char *) &(pvar->surname), argv[2], 20);
   memcpy((char *) &(pvar->misc), argv[3],4056);

   return 0;
} 

提前谢谢。

1 个答案:

答案 0 :(得分:5)

更正您的代码,在memcpy中删除&

   memcpy((char *) (pvar->name), argv[1], 20);
   memcpy((char *) (pvar->surname), argv[2], 20);
   memcpy((char *) (pvar->misc), argv[3],4056);

此外,您正在应对pvar的{​​{1}}。 memccpy的语法是:

argv

数组void *memcpy( void *to, const void *from, size_t count ); 到数组count的{​​{1}}个字符。

所以

  • memcpy函数中的第三个参数应该是from 的长度,但不是 20,20,4056,
  • 同时添加null to

喜欢:

argv[i]