簡體   English   中英

C中的結構字符串變量賦值

[英]struct string variable assignment in C

#include <stdio.h>

struct Student {
    char name[10];
    int age;
    double gpa;
};

int main(void)
{
    struct Student s1;
    s1.age = 20;
    s1.gpa = 4.3;
    s1.name[10] = "Tom";

    printf("%s", s1.name);

    return 0;
}

我知道'strcpy'函數或其他分配字符串的方式。 但為什么它在代碼上方不起作用..? 請幫我。

特別是 s1.name[10] = "Tom";

謝謝。

這個說法有幾個問題:

s1.name[10] = "Tom";

在 C 數組(長度為n )中,索引從0開始,到n-1結束。 訪問0n-1 (包括)之外的任何元素將導致未定義的行為。 s1.name[10]超出訪問范圍且無效。

另一個問題是您不能使用賦值運算符將字符串文字分配給數組,除非它在初始化程序中使用。 您必須使用strcpy將字符串文字復制到char數組。 確保字符串文字的長度不能超過數組的大小(確保\0有空間)。

在這個表達式語句中

s1.name[10] = "Tom";

左側操作數的類型為char 此外,在這個表達式 s1.name[10] 中,有一個取消引用的指針指向分配的數組之外。

隱式轉換后的右側操作數的類型為char *

因此,您試圖將指針分配給數組中不存在的元素。

請注意,數組沒有賦值運算符。

您可以在定義結構類型的對象時初始化它

 struct Student s1=
 {
    .name = "Tom",
    .age = 20,
    .gpa = 4.3
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM