gpt4 book ai didi

c - 指向结构 argv 赋值的指针

转载 作者:太空宇宙 更新时间:2023-11-04 01:09:51 27 4
gpt4 key购买 nike

我一直在尝试将 argv[x] 分配给变量指向的结构。我写了下面的代码并得到了 Segmentation fault,我知道这是一个内存冲突。我不明白我在哪里犯了错误。这是代码:

#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;
}

提前谢谢你。

最佳答案

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

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

此外,您正在处理来自 argvpvar。 memccpy 的语法是:

void *memcpy( void *to, const void *from, size_t count );  

其中 count 个字符从数组 from 到数组 to

所以

  • memcpy 函数中的第三个参数应该是 argv[i] 的长度 但不是 20, 20, 4056,
  • 同时添加空 '\0'

喜欢:

   memcpy((char *) (pvar->name), argv[1], strlen(argv[1]));
pvar->name[strlen(argv[1]) + 1] = '\0';
memcpy((char *) (pvar->surname), argv[2], strlen(argv[2]));
pvar->surname[strlen(argv[2]) + 1] = '\0';
memcpy((char *) (pvar->misc), argv[3],strlen(argv[3]));
pvar->misc[strlen(argv[3]) + 1] = '\0';

关于c - 指向结构 argv 赋值的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15131073/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com