2013-06-25 214 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++。