C不兼容指针错误

C不兼容指针错误,c,pointers,C,Pointers,我需要帮助解决这个问题。代码如下: #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> struct Person{ char *name[100]; char *nationality[100]; }; void put_values(struct Person *p, const char *name){ strncp

我需要帮助解决这个问题。代码如下:

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

struct Person{
    char *name[100];
    char *nationality[100];
};

void put_values(struct Person *p, const char *name){
  strncpy(p->name, name, 500);
}

int main(int argc, char *argv[]){
    struct Person *person = malloc(sizeof(struct Person));
    put_values(person, argv[1]);
    free(person);
    return 0;
}
任何帮助或提示都将不胜感激。谢谢

您的结构应该是(没有
*
字符):

按照您的方式,
name
实际上是一个由100个字符组成的指针数组,而不是100个字符。除非你的名字是胡安·罗米雷斯·桑乔·里卡多·阿古斯蒂·多纳泰罗·阿方索。。。Ramundo Ronaldo巴士站F'tang-F'tang Ole饼干桶,你希望能够独立处理每个名字,这可能不是你想要的


当您试图复制到的字段只有100:-)时,将您的
strncpy
限制为500个字符也可能是不明智的。

错误出现在
Person
的声明中:

struct Person{
    char name[100];
    char nationality[100];
};

您的声明建议一个人有100个可能的姓名和100个可能的国籍,必须动态分配。这不是
Person
的预期用途:您似乎想要一个名称/国籍,每个名称/国籍包含99个字符+空终止符。

在您的代码中,名称表示100个字符指针的数组。 但是对于strncpy,第一个参数是char指针。 所以你应该这样做:

struct Person{
    char name[100];
    char nationality[100];
};
通过定义

struct Person{
    char *name[100];
    char *nationality[100];
};

您有一个指向字符数组的指针。由于字符数组相当于指向一组字符的指针,
char*name[100]
相当于指向一组字符的一组指针。如果您打算拥有多组100个字符数组,那么这可能很有用,但很明显,这不是您的意图

strncpy(p->name, name, 500);
在上面的定义下,将尝试将字符串复制到指向一组字符的指针中,而不是所需的字符串

struct Person{
    char name[100];
    char nationality[100];
};

strncpy(p->name, name, 500);

它将字符串复制到一组字符中。

char*name[100]
适用于名字超过90个的人。你的意思是
字符名[100]
。如果你选择200个国家,你就可以拥有真正的“世界公民”;我相信只有大约180个国家。为什么第三个论点是“strncpy”
500
500
来自哪里?
strncpy(p->name, name, 500);
struct Person{
    char name[100];
    char nationality[100];
};

strncpy(p->name, name, 500);