如何在运行时为结构数组赋值?

Posted

技术标签:

【中文标题】如何在运行时为结构数组赋值?【英文标题】:How to assign values to an array of struct at run-time? 【发布时间】:2012-01-06 19:23:32 【问题描述】:

我声明了一个结构数组并在编译时对其进行了初始化。

现在,出于单元测试的目的,我想从一个可以从 main() 调用的函数和我的单元测试中对其进行初始化。

出于某种原因,可能涉及 16 小时的编码马拉松和疲惫,我无法弄清楚。

【问题讨论】:

【参考方案1】:

所以假设你有

struct foo 
   int a;
   int b;
;

struct foo foo_array[5] = 
  0, 0 ,  1, 1 ,  2, 2 
;


int main()  
     memcpy(foo_array, some_stuff, sizeof(foo_array)); // should work
    ...

或者你可以:

int main() 
    int i;
    for ( i = 0; i < sizeof(foo_array)/sizeof(struct foo); i++ ) 
           init(&foo_array[i]);
    

但是如果不查看您的代码,很难说出是什么导致了问题...我敢肯定,您可能忽略了一些非常微不足道的事情,因为您已经累了 16 个小时。

【讨论】:

【参考方案2】:
typedef struct 
  int ia;
  char * pc;
 St_t;

void stInit(St_t * pst) 
  if (!pst)
    return;

  pst->ia = 1;
  pst->pc = strdup("foo");

  /* Assuming this function 'knows' the array has two elements, 
     we simply increment 'pst' to reference the next element. */
  ++ pst;

  pst->ia = 2;
  pst->pc = strdup("bar");



void foo(void) 
  /* Declare 'st' and set it to zero(s)/NULL(s). */
  St_t st[2] = 0, 0;

  /* Initialise 'st' during run-time from a function. */
  stInit(st);

  ...

【讨论】:

【参考方案3】:

看到这个:

struct Student

    int rollNo;
    float cgpa;
;

int main()

    const int totalStudents=10;

    Student studentsArray[totalStudents];

    for(int currentIndex=0; currentIndex< totalStudents; currentIndex++)
    
          printf("Enter Roll No for student # %d\n" , currentIndex+1);
          scanf("%d\n", &studentsArray[currentIndex].rollNo);

          printf("Enter CGPA for student # %d\n", currentIndex+1);
          scanf("%d\n", &studentsArray[currentIndex].cgpa);
     

【讨论】:

1) 这是 C++ 代码而不是 C 代码。 2)这对单元测试没有用; 3) 这不是家庭作业

以上是关于如何在运行时为结构数组赋值?的主要内容,如果未能解决你的问题,请参考以下文章

C语言,结构体中的数组怎么赋值,?

C语言,结构体中的数组怎么赋值,?

C语言结构体数组成员怎么赋值?

C语言关于结构体变量为动态数组赋值问题

c语言结构体中的一个char数组怎么赋值?

c语言字符串赋值给结构体内字符串数组的问题