2013-06-25 166 views
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"; 

回答

6

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

龙答:在定义的名称作为一个结构的字符数组,你分配在该结构中设置内存量以存储名称中的字符。要将字符到那个空间,你必须复制它们,而这也正是strncpy进来。

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

0

你可以像这样分配C++定义的字符串。这就是你如何做到的。

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

字符串是非常方便的字符数组这是动态的,这意味着你不需要在编译time.It自动指定大小重新sizes.Also你有一吨的字符串库定义的函数这会让你的生活变得轻松。

阅读字符串here

+0

代码是纯C语言,我不认为C++会有所帮助。 – jnovacho

+0

正如你所看到的那个人用C++标记了这个问题。 – Aravind

0

你应该使用这个功能

strcpy(singleTeams.name, "David") 

或使用字符串C++。