使用strcpy()为结构赋值。程序不运行
我是c新手,我尝试使用strcpy将值赋值给结构(我尝试使用左值赋值方法,这会引发错误)。我试着运行程序,但什么也没发生。我的代码中的错误在哪里? 我用代码块来运行程序使用strcpy()为结构赋值。程序不运行,c,arrays,struct,C,Arrays,Struct,我是c新手,我尝试使用strcpy将值赋值给结构(我尝试使用左值赋值方法,这会引发错误)。我试着运行程序,但什么也没发生。我的代码中的错误在哪里? 我用代码块来运行程序 #include <stdio.h> #include <stdlib.h> int main(){ struct student{ char name[25]; int age; }; struct student s1; strcpy(
#include <stdio.h>
#include <stdlib.h>
int main(){
struct student{
char name[25];
int age;
};
struct student s1;
strcpy(s1.name, "Sammy");
strcpy(s1.age, "18");
printf("%s, %d", s1.name, s1.age);
}
#包括
#包括
int main(){
结构学生{
字符名[25];
智力年龄;
};
结构学生s1;
strcpy(s1.name,“Sammy”);
strcpy(s1.18岁);
printf(“%s,%d”,s1.name,s1.age);
}
删除此项:
strcpy(s1.age, "18");
你可以选择正常作业<代码>s1。年龄=18岁代码>用于将字符串复制到字符缓冲区。有strcpy(s1.18岁)
,您正试图从字符串18
的地址读取一些内容,然后写入s1.age
,这是一个int
将
age
成员声明为char
数组,就像对name
所做的那样(尽管这会限制您对age
执行算术运算)。或者,使用赋值运算符=
分配int
。比如:s1.age=18代码>要做的第一件事是从编译器中读取警告,因为它们包含有关代码问题的有价值信息。使用gcc和clang编译原始代码时会出现以下警告:
叮当声:
so5.c:12:12:警告:不兼容的整数到指针转换将“int”传递给“char*”类型的参数[-Wint conversion]
通用条款:
so5.c:12:12:警告:传递'strcpy'的参数1将从整数生成指针,而不进行强制转换[-Wint转换]
strcpy(s1.18岁)
因此,令人不快的是:
strcpy(s1.age, "18");
首先将未初始化的s1.age视为指针,并尝试将字符串复制到此未知位置。这很可能会导致分离故障
当然,您可以为它创建一个指针,并用“18”
但请稍候,这样会产生如下打印结果:
萨米,14385
因为字符串是用ascii编码的,所以有三个字节0x31,0x38,0
当以0x003831
或十进制14385
写入int age
字段的位置时。然而,铰孔字节被随机初始化为0,这纯粹是运气
分配年龄值的正确方法是分配:
s1.age = 18;
s1.age
是一个int
,而不是一个字符串。不能使用strcpystrcpy
对其进行分配。尝试s1.age=18代码>@Nate Eldredge是的,现在它似乎正在工作。感谢您的支持,还有#include一些编译器可能需要它1.age=18它不是一个字符串,但如果您没有收到strcpy(s1.age,“18”)的错误消息代码>然后调整您的编译器设置--您在这里浪费了大量时间,而利用编译器的诊断功能本可以节省这些时间是的,我已经改变了这一点,现在它可以工作了。谢谢你的帮助。另外,请拆下integer@TruthSeeker之前是&s…现在是问题编辑
s1.age = 18;