[英]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
結束。 訪問0
到n-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.