我正在尝试使用字符串文字在结构中分配一个Character数组,如下所示,但它不起作用:
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);
}
答案 0 :(得分:1)
此
s1.name[20] = "Mark";
是赋值语句。表达式statememnt的左侧为char
类型,而语句的右侧为char *
类型。
因此,编译器应发出警告,您正在尝试将类型为char *
的对象分配给类型为char
的对象(在这种情况下,字符串文字为{{1 }}隐式转换为char[5]
类型。
您需要做的是将字符串文字char *
复制到chracter数组"Mark"
中。
为此,您应该使用标准功能name
。
strcpy