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);