#include <stdio.h>
#include <string.h>
int main(void) {
int number_of_members;
char family[number_of_members][20][number_of_members][20];
char member_name[20];
char birth_state[20];
char family_last_name[20];
printf("What is the last name of the family?\n");
scanf("%s", &family_last_name);
printf("How many members do you want to create?\n");
scanf("%d", &number_of_members);
int const FAMILY_SIZE = number_of_members;
number_of_members = number_of_members -1;
printf("Enter the family member name: \n");
for(number_of_members;number_of_members>-1;number_of_members--)
{
scanf("%s", &member_name);
strcpy(family[number_of_members], member_name);
printf(" %d %s %s\n",number_of_members, member_name, family_last_name);
}
printf("%s, %s ", family[0], family[1]);
return 0;
}
这是输出:(来自 Ideone.com)
此代码的输入是:Layne、2、tim、jim。
运行时,它会显示数组中名称的正确索引,但是一旦退出,它将显示最后输入的名称 jim,如 family 1和家人[0]。我不明白 strcpy() 是如何工作的吗?或者这是一个逻辑错误?我们将不胜感激!
最佳答案
这是非常非常错误的
int number_of_members;
char family[number_of_members][20][number_of_members][20];
- 因为您尚未初始化
number_of_members
。 - 因为它没有任何意义,所以您不可能真正需要这种数组。
是的,如果你启用编译器警告,它会用棍子打你的 Nose ,因为
strcpy(family[number_of_members], member_name);
甚至不应该编译,并且是未定义的行为,因为 family[number_of_members]
的类型是 char
数组的数组的数组。
strcpy
可以采用 char
数组,因为它会自动转换为 char
指针,并且前提是数组符合 c 字符串,那么 strcpy()
将正常工作,在您的情况下,行为未定义,因为几乎可以肯定 '\0'
永远不会被发现在目标指针中。
关于c - 这是对 strcpy() 功能的误解吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28927469/