gpt4 book ai didi

c - 这是对 strcpy() 功能的误解吗?

转载 作者:行者123 更新时间:2023-11-30 18:39:41 25 4
gpt4 key购买 nike

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

Ideone.com with code

此代码的输入是:Layne、2、tim、jim。

运行时,它会显示数组中名称的正确索引,但是一旦退出,它将显示最后输入的名称 jim,如 family 1和家人[0]。我不明白 strcpy() 是如何工作的吗?或者这是一个逻辑错误?我们将不胜感激!

最佳答案

这是非常非常错误的

int number_of_members;
char family[number_of_members][20][number_of_members][20];
  1. 因为您尚未初始化 number_of_members
  2. 因为它没有任何意义,所以您不可能真正需要这种数组。

是的,如果你启用编译器警告,它会用棍子打你的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com