gpt4 book ai didi

c++ - 将变量分配给字符串

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:37:16 26 4
gpt4 key购买 nike

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

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

最佳答案

简答:你想要的是strncpy

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

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

关于c++ - 将变量分配给字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17289348/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com