我是学习结构的初学者。我的代码有点问题。我知道这不是分配字符串的方法。有人可以告诉我如何?该网站教会我这样做。
#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";
答案 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 ++中使用字符串。