将值分配给结构中的字符数组

时间:2019-06-16 20:32:18

标签: c arrays string type-conversion strcpy

我正在尝试使用字符串文字在结构中分配一个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);
}

1 个答案:

答案 0 :(得分:1)

s1.name[20] = "Mark";

是赋值语句。表达式statememnt的左侧为char类型,而语句的右侧为char *类型。

因此,编译器应发出警告,您正在尝试将类型为char *的对象分配给类型为char的对象(在这种情况下,字符串文字为{{1 }}隐式转换为char[5]类型。

您需要做的是将字符串文字char *复制到chracter数组"Mark"中。

为此,您应该使用标准功能name

strcpy