Указатель на структуру argv присваивания
Я пытался назначить argv[x]
чтобы структура указывала на переменную. Я написал следующий код и получил ошибку сегментации, которая, как я знаю, является нарушением памяти. Я не понимаю, где я допустил ошибку. Вот код:
#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 ответ
Решение
Исправьте ваш код, удалите &
в memcpy:
memcpy((char *) (pvar->name), argv[1], 20);
memcpy((char *) (pvar->surname), argv[2], 20);
memcpy((char *) (pvar->misc), argv[3],4056);
Кроме того, вы справляетесь с pvar
от argv
, синтаксис 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';