这是我的代码,其中如果学生分数大于 85,奖学金状态将更改为 sanctioned
,但更新后不会打印
#include<stdio.h>
#include<string.h>
struct scholor
{
char name[25];
int sem;
int marks;
char status;
};
void sanction(int m, char *s)
{
if(m>85)
{
char p[15]="sanctioned";
char *r;
r=p;
while(*r!='\0')
{
*s=*r;
s++;
r++;
}
*s='\0';
}
}
int main()
{
struct scholor s1;
scanf("%s%d%d%s",&s1.name,&s1.sem,&s1.marks,&s1.status);
sanction(s1.marks,&s1.status);
printf("%s",s1.status);
}
最佳答案
status
是单个字符,但您将字符串存储到其中,从而有效地进行越界访问( undefined behaviour )。将其更改为数组,然后您就可以复制。
struct scholor
{
char name[25];
int sem;
int marks;
char status[128];
};
并调整调用和传递(因为 status
现在是一个数组 - 当传递给函数时,它的名称会转换为其第一个元素的指针):
scanf("%s%d%d%s",s1.name,&s1.sem,&s1.marks,s1.status);
sanction(s1.marks,s1.status);
printf("%s",s1.status);
其他建议:
1. 对 main
使用标准原型(prototype),例如:int main(void)
2. 您可以使用strcpy
来复制字符串,而不是自己做。
关于c - 为什么更新的结构变量不打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31017880/