我是C的新手。以下代码中的字符串赋值有效:
#include<stdio.h>
int main(void){
char str[] = "string";
printf("%s\n",str);
}
但即使我将索引编号提供给name[]
:
#include <stdio.h>
int main(void){
struct student {
char name[10];
int salary;
};
struct student a;
a.name[10] = "Markson";
a.salary = 100;
printf("the name is %s\n",a.name);
return 0;
}
为什么会这样?
答案 0 :(得分:5)
你不能这样做
a.name[10] = "Markson";
您需要strcpy
字符串"Markson"
到a.name
。
strcpy
声明:
char * strcpy ( char * destination, const char * source );
所以,你需要
strcpy( a.name, "Markson" );
答案 1 :(得分:5)
您无法分配数组。两种解决方案:复制字符串:
strcpy(a.name, "Markson");
或使用const char指针而不是数组,然后您可以简单地指定它:
struct {
const char *name;
/* etc. */
};
a.name = "Markson";
如果您希望稍后修改“name”的内容,请使用非const char指针:
struct {
char *name;
}
a.name = strdup("Markson");
(在后一种情况下,不要忘记释放由strdup()分配的内存!)
答案 2 :(得分:3)
char str[] = "string";
是一个声明,您可以在其中为字符串提供初始值。
name[10]
标识字符串中的单个字符,因此您可以为其分配一个字符,但不能为字符串分配。
声明之外的C风格字符串没有简单的赋值。您需要使用strcpy
。
答案 3 :(得分:0)
因为在一种情况下,您在声明中分配它,而在另一种情况下则不是。如果你想做相同的写:
struct student a = {"Markson", 0};