我尝试使用字符串文字在结构中分配字符数组,如下所示,但它不起作用:
s1.name[20] = "Mark";//prints some garbage string with special symbols
但是当我尝试使用 strcpy 分配它时,它工作正常。有人可以解释一下为什么在第一种情况下失败了吗?
strcpy(s1.name, "Mark");//This Works
下面是完整的代码:
struct student {
char name[20];
int id;
float marks;
};
int main(int argc, const char * argv[])
{
struct student s1;
s1.name[20] = "Mark";
//strcpy(s1.name, "Sonoo Jaiswal");
s1.id = 22;
s1.marks = 76;
printf("%s: , %d: , %f: \n",s1.name, s1.id,s1.marks);
}
最佳答案
这个
s1.name[20] = "Mark";
是一个赋值语句。表达式 statememnt 左侧的类型为 char
,而语句右侧的类型为 char *
。
因此,编译器应该发出警告,表明您正在尝试将 char *
类型的对象分配给 char
类型的对象(在此上下文中,类型为字符串文字 char[5]
的隐式转换为类型 char *
)。
您需要做的是将字符串文字“Mark”
复制到字符数组name
中。
为此,您应该使用标准 C 函数 strcpy
。
strcpy( s1.name, "Mark" );
关于c - 为结构体中的字符数组赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56622409/