更改结构数组元素中的值

标签 c arrays pointers

我正在做一项作业,遇到了具有挑战性的问题。就我而言,从我所了解的情况来看,下面的代码应该是正确的,但它不起作用。基本上我想要的是将字符串值复制到结构的变量成员中,该结构是作为指针传递给方法的数组的一部分。我错过了什么?

typedef struct
{
  char * name; //variable in struct I am trying to access
} Struct;

void foo(Struct * arr) //array of Structs passed into function as a pointer 
{   
  int i = 0;
  while(i++ < 2)    
  {
      arr[i].name = malloc(sizeof(char *));  //assigning memory to variable in each Struct
      arr[i].name = strdup("name");  //copying "name" to variable in each Struct
      printf("C - %s\n", arr[i].name);  //printing out name variable in each Struct
  } 
}

main()
{
  Struct * arr;  //defining pointer
  arr = calloc(2, sizeof(Struct));  //allocating memory so pointer can hold 2 Structs
  foo(arr);  //calling function foo passing pointer into function   
  return 0;
}

这段代码可以编译和运行,但是它并没有按照设计的目的运行。如果这是微不足道的事情,请原谅我。我是 C 语言的新手

最佳答案

两个问题:

  1. while(i++ < 2)此行更改 i 的值一旦它检查它,您的循环体将与检查时不同。
  2. arr[i].name = strdup("name");覆盖 .name 的值指针,导致你的内存泄漏malloc()早前编辑。

关于更改结构数组元素中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19306072/

相关文章:

c - 如何将 struct 中的一些信息打包到 2 字节缓冲区中?

java - 数组应该比 ArrayList 快这么多吗?

c# - 为什么我的类数组元素表现得像一个指针? (C#)

c - 我是否以错误的方式使用结构?

c - 用 C 从文件中读取其中的所有元素

c - 使用C语言在嵌入式系统中进行可靠的字符串连接

c - 分配内存给 int *a[13][13] 类型的变量

c - 是否可以将标签的地址存储在变量中并使用 goto 跳转到它?

c++ - 使用多维数组

c++ - 为什么 std::cout 将 volatile 指针转换为 bool?