c - 为结构体中的字符数组赋值

标签 c arrays string type-conversion strcpy

我尝试使用字符串文字在结构中分配字符数组,如下所示,但它不起作用:

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/

相关文章:

javascript - 通过 html 将多维键控数组传递到 javascript

php - id在数组中的Mysql

java - 如何删除字符串的一部分

c - 如何将两个 gmpz_t 转换为一个 mpq_t?

c - 为什么我没有正确使用 '->'?我知道这可能是一个简单的概念错误,但不知道为什么

javascript - 删除关联数组中的元素

python - 在Python中从句子中删除单词但不删除子词

c - 将目标文件链接到二进制文件

c - 如何解决此文件相关问题

javascript - XSS 和其他终止 JavaScript 字符串的方法