为什么我不能strcpy?

时间:2015-12-11 00:15:53

标签: c multidimensional-array strcpy

对于作业,我必须在C中制作一个由几个互锁功能组成的成绩簿。在没有(太多)头痛的情况下,我已经完成了前几个,但接下来就是这个问题。基本上,我试图获取一个字符串并将其复制到结构内部的二维数组中。我想我已经取得了成功,但是strcpy一直把这两个迷人的家伙扔在我的脸上:

  

传递strcpy的参数1使得指针来自整数而没有强制转换

     

预期' char * 限制'但是参数的类型为' char'。

这是我的代码。 gb是指向结构的指针。如果我还没有澄清任何内容,请询问。

int add_assignment(Gradebook *gb, const char assgn[MAX_NUMBER_OF_ASSIGNMENTS]) {
  int i, j;

  for(i=0; i < MAX_NUMBER_OF_ASSIGNMENTS; i++) {
    for(j=0; j < (MAX_NAME_LEN+1); j++) {
      strcpy(gb->assignment_names[i][j], assgn);
    }
  }

  return 1;
}

以下是成绩簿结构:

typedef struct gradebook {
  int number_of_students;
  Students students[MAX_NUMBER_OF_STUDENTS];
  int number_of_assignments;
  char assignment_names[MAX_NUMBER_OF_ASSIGNMENTS][MAX_NAME_LEN + 1];
  int scores[MAX_NUMBER_OF_STUDENTS][MAX_NUMBER_OF_ASSIGNMENTS];
} Gradebook;

2 个答案:

答案 0 :(得分:2)

问题在于使用两个循环:

for(i=0; i < MAX_NUMBER_OF_ASSIGNMENTS; i++) {
  for(j=0; j < (MAX_NAME_LEN+1); j++) {
   strcpy(gb->assignment_names[i][j], assgn);
  }
}

内部循环正在尝试将字符串(assgn)复制到单个char中。你可能意味着

for(i=0; i < MAX_NUMBER_OF_ASSIGNMENTS; i++) {
  strcpy(gb->assignment_names[i], assgn);
}

相反,但这可能不是您想要的,其中一项任务会覆盖整个分配列表。很难说出你在寻找什么逻辑。

答案 1 :(得分:1)

assignment_names[i][j]是单个字符,而不是字符串。 assignment_names[i]是一个字符数组,因此您应该复制到该字符数组。你不需要内循环。

int add_assignment(Gradebook *gb, const char assgn[]) {
    int i;

    for(i=0; i < MAX_NUMBER_OF_ASSIGNMENTS; i++) {
       strcpy(gb->assignment_names[i], assgn);
    }

    return 1;
}