我需要帮助来解决这个问题。这是代码:
\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}\nRun Code Online (Sandbox Code Playgroud)\n\n这是错误消息:
\n\nex17t.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\nRun Code Online (Sandbox Code Playgroud)\n\n任何帮助或提示将不胜感激。谢谢!
\n你的结构应该是(没有*字符):
struct Person {\n char name[100];\n char nationality[100];\n};\nRun 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
strncpy当您尝试复制到的字段只有 100 个字符时,将字符数限制在 500 个字符可能也不明智:-)