将变量分配给字符串

时间:2013-06-25 04:49:04

标签: c++ string struct

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

#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";

3 个答案:

答案 0 :(得分:6)

简短回答:你想要的是strncpy

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

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

答案 1 :(得分:0)

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

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

字符串是非常方便的字符数组,它们是动态的,这意味着您无需在编译时指定大小。它会自动重新调整大小。此外,您在字符串库中定义了大量功能,这些功能将使生活变得更好对你来说很容易。

阅读字符串here

答案 2 :(得分:0)

你应该使用这个功能

strcpy(singleTeams.name, "David")

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