4

我是学习结构的初学者。我的代码有点问题。我知道这不是分配字符串的方法。有人可以告诉我怎么做吗?该网站教我这样做。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_PERSON 50
#define NAME_LENGTH 30
#define ADDR_LENGTH 60

struct player {

    char name [NAME_LENGTH];
    char address [ADDR_LENGTH];     
    int salary;

};

int main (int argc, char *argv[]){

   struct player singleTeams;
   struct player multipleTeams[MAX_PERSON];

   singleTeams.name = "David";
   multipleTeams[20].name = "Robin";

   printf("Person on the single team is %s\n", singleTeams.name);
   printf("Person on the multiple team is %s\n", multipleTeams[20].name);


   return EXIT_SUCCESS;
}

我的错误在这条线上

   singleTeams.name = "David";
   multipleTeams[20].name = "Robin";
4

3 回答 3

6

简短的回答:你想要的是strncpy

长答案:在将名称定义为结构中的字符数组时,您在该结构中分配了一定数量的内存来存储名称中的字符。要将字符移动到那个空间,你必须复制它们,这就是strncpy进来的地方。

您也可以将其定义name为指向 char ( char *) 的指针,在这种情况下,您的分配是有意义的。在 C 中,当您使用文字字符串时,您实际上是在可执行文件中的某个位置包含这些字节,并且该"..."语法返回指向这些字符静态存储位置的指针,作为char *. 从类型的角度来看,char *是一种比 更具体的类型char[30],因此您不能直接将该指针分配给您的player.name变量。从 C 实现的角度来看,name它实际上不是一个可写的指针变量,因为它包含一个可变值;它仅表示结构内存的特定部分(即 30 字节缓冲区的第一个字节),不能重新分配以指向“大卫”或“罗宾”

于 2013-06-25T04:51:17.050 回答
0

您可以像这样分配 C++ 定义的字符串。这就是您的操作方式。

 struct player {
   std::string name;
   std::string address;     
   int salary;
 };

字符串是非常方便的动态字符数组,这意味着您无需在编译时指定大小。它会自动重新调整大小。此外,您在字符串库中定义了大量函数,这将使您的生活变得轻松.

在此处阅读字符串。

于 2013-06-25T07:02:59.483 回答
0

你应该使用这个功能

strcpy(singleTeams.name, "David")

或在 C++ 中使用字符串。

于 2013-06-25T10:05:55.900 回答