for(j=0;j<10;j++)
[i] score.name[j] = 'a';
[i] printf("%s请输入该生的语文 数学 英语成绩:",score.name);
[i] 是这句在输出时%s为乱码吗?一个个赋值name最后得到的应该不是字符串;把它改为
for(j=0;j<10;j++)
[i] score.name[j] = 'a';
[i] score.name[9]='\0';
[i] printf("%s请输入该生的语文 数学 英语成绩:",score.name);
就可以输出了。
我又错了..没有掌握好字符串的定义:以NULL结尾的字符序列
通过下面的代码测试了一下
程序代码:
但如果改为
程序代码:
这句输入的字符串也是静态存储的?在函数student结束后,结构数组score所占内存被释放,所以不能通过数组score的名字访问依然存在的字符串name对吗?
1.字符串是静态存储,但存放这些字符的数组不是静态存储
2.是的,但name不是字符串,是一个char数组
[i] score.name[j] = 'a';
[i] printf("%s请输入该生的语文 数学 英语成绩:",score.name);
[i] 是这句在输出时%s为乱码吗?一个个赋值name最后得到的应该不是字符串;把它改为
for(j=0;j<10;j++)
[i] score.name[j] = 'a';
[i] score.name[9]='\0';
[i] printf("%s请输入该生的语文 数学 英语成绩:",score.name);
就可以输出了。
我又错了..没有掌握好字符串的定义:以NULL结尾的字符序列
通过下面的代码测试了一下
程序代码:#include <stdio.h>
#define N 3
typedef struct
{
char name[10];
float chinese;
float math;
float english;
}student;
student *sum()
{
student score[N];
int i,j;
for(i=0;i<N;i++)
{
for(j=0;j<10;j++){
score[i].name[j] = 'a';
}
score[i].name[9]='\0';
score[i].chinese=3;
score[i].math=3;
score[i].english=3;
printf("name:%s ",score[i].name);
}
printf("\n");
return (score);
}
int main(int argc,char **argv)
{
int i;
student *ptr;
ptr=sum();
for(i=0;i<N;i++)
{
printf("%s's chinese:%.2f math:%.2f english:%.2f\n",
ptr->name,ptr->chinese,ptr->math,ptr->english);
ptr++;
}
return 0;
}第一行输出的姓名是乱码但如果改为
程序代码:#include <stdio.h>
#define N 3
typedef struct
{
char *name;
float chinese;
float math;
float english;
}student;
student *sum()
{
student score[N];
int i,j;
for(i=0;i<N;i++)
{
//for(j=0;j<10;j++){
// score[i].name[j] = 'a';
//}
//score[i].name[9]='\0';
score[i].name="aaaaa";
score[i].chinese=3;
score[i].math=3;
score[i].english=3;
printf("name:%s ",score[i].name);
}
printf("\n");
return (score);
}
int main()
{
int i;
student *ptr;
ptr=sum();
for(i=0;i<N;i++)
{
printf("%s's chinese:%.2f math:%.2f english:%.2f\n",
ptr->name,ptr->chinese,ptr->math,ptr->english);
ptr++;
}
return 0;
}第一行输出的名字就是正确的了这句输入的字符串也是静态存储的?在函数student结束后,结构数组score所占内存被释放,所以不能通过数组score的名字访问依然存在的字符串name对吗?
1.字符串是静态存储,但存放这些字符的数组不是静态存储
2.是的,但name不是字符串,是一个char数组








