2017-08-04 42 views
-2

我對整型和字符類型都做了一個簡單的結構,在將「結構」分配給我的LE結構字符串時,我面臨着一個左值需要的錯誤。我不明白爲什麼,因爲這通常是我如何分配一個字符串。C:分配給字符串時需要Lvalue錯誤

#include<stdio> 
#include<conio> 

struct Lesson{ 
    int lessonNumber; 
    char lessonName[80]; 
}LE; 

main(){ 

    LE.lessonName = "Structures"; 
    LE.lessonNumber = 1; 


    printf("%s",LE.lessonName); 
    printf("%d",LE.lessonNumber); 

    getch(); 
} 
+5

你不能分配給一個數組,只能*拷貝*。 –

+0

strcpy而不是= – CIsForCookies

+1

您在這裏沒有字符串類型 –

回答

2

一個簡單的方法去的是(如果你不想叫strcpy做):

#include<stdio.h> 

struct Lesson{ 
     int lessonNumber; 
     char *lessonName; 
}LE; 

int main(void){ 

    LE.lessonName = "Structures"; 
    LE.lessonNumber = 1; 

    printf("%s",LE.lessonName); 
    printf("%d",LE.lessonNumber); 
} 

這裏lessonName是一個指針,數組。使用此處的賦值運算符:LE.lessonName = "Structures",即將字符串「結構」存儲到的地址分配給LE.lessonName

我不明白爲什麼。因爲那通常我將如何分配一個 字符串

有幾件事要記住在這裏。如果您將lessonName聲明爲數組(如您所做的那樣),則應該記住,數組不是您可以分配給的數組。你可以指定的是使用=運算符的數組中的特定位置/索引。因此,您可以逐個字符地構建您的C字符串,或者,您可以調用strcpy函數將字符逐個字符(包括\0)複製到lessonName

當您使用指針(char *lessonName)並且說出類似LE.lessonName = "Structure"這樣的字符串時,無法修改該字符串。你不能做LE.lessonName[0] = 'g'。當然,您可以修改LE.lessonName以指向其他字符串,例如LE.lessonName = "cat";