C 不兼容指针错误

3 c pointers

我需要帮助来解决这个问题。这是代码:

\n\n
#include <stdio.h>\n#include <stdlib.h>\n#include <errno.h>\n#include <string.h>\n\nstruct Person{\n    char *name[100];\n    char *nationality[100];\n};\n\nvoid put_values(struct Person *p, const char *name){\n  strncpy(p->name, name, 500);\n}\n\nint main(int argc, char *argv[]){\n    struct Person *person = malloc(sizeof(struct Person));\n    put_values(person, argv[1]);\n    free(person);\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是错误消息:

\n\n
ex17t.c: In function \xe2\x80\x98put_values\xe2\x80\x99:\nex17t.c:19:3: warning: passing argument 1 of \xe2\x80\x98strncpy\xe2\x80\x99 from incompatible pointer type [enabled by default]\nIn file included from ex17t.c:4:0:\n/usr/include/string.h:131:14: note: expected \xe2\x80\x98char * __restrict__\xe2\x80\x99 but argument is of   type \xe2\x80\x98char **\xe2\x80\x99\n
Run Code Online (Sandbox Code Playgroud)\n\n

任何帮助或提示将不胜感激。谢谢!

\n

pax*_*blo 5

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

\n\n
struct Person {\n    char name[100];\n    char nationality[100];\n};\n
Run Code Online (Sandbox Code Playgroud)\n\n

您的方式实际上是一个包含 100 个字符指针name的数组,而不是 100 个字符。除非您的名字是并且您希望能够独立处理每个名称,否则这可能不是您想要的。Juan Romirez Sancho Ricardo Agusti Donatello Alfonso ... Ramundo Ronaldo Bus Stop F\xe2\x80\x99tang-F\xe2\x80\x99tang Ole Biscuit Barrell

\n\n

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

\n