#include<stdio.h>
#include<stdlib.h>
#define datesize 64
struct students
{
char *name;
char *member;
char *state;
};
void appendmessage()
{
struct students *s;
printf("學生姓名:");
//標記1
char *name;
scanf("%s",name);
//標記1 end
//標記2
scanf("%s",(*s).name);
//標記2 end
printf("學生編號:");
scanf("%s",(*s).member);
printf("學生狀態:");
scanf("%s",(*s).state);
printf("----寫入檔案----");
FILE *fp = fopen("studate.txt","ab");
......
}
如題:標記1輸入不會報錯,但標記2報錯。
uj5u.com熱心網友回復:
都是野指標惹的禍,s是野指標,s->name也是野指標。所以結果是未定義的,出現段錯誤也是可能的。#include<stdio.h>
#include<stdlib.h>
#define datesize 64
struct students
{
char *name;
char *member;
char *state;
};
void appendmessage()
{
struct students *s;
s = (struct students *)malloc(sizeof(struct students));
if (!s)
return;
printf("學生姓名:");
//標記1
char *name = (char *)malloc(sizeof(char) * 32);
if (!name)
return;
scanf("%s",name);
//標記1 end
//標記2
s->name = (char *)malloc(sizeof(char) * 32);
if (!s->name)
return;
scanf("%s",(*s).name);
//標記2 end
printf("學生編號:");
s->member = (char *)malloc(sizeof(char) * 32);
if (!s->member)
return;
scanf("%s",(*s).member);
printf("學生狀態:");
s->state = (char *)malloc(sizeof(char) * 32);
if (!s->state)
return;
scanf("%s",(*s).state);
printf("----寫入檔案----");
FILE *fp = fopen("studate.txt","ab");
//......
}
供參考~
上面的改法只是一種,也可以用陣列或普通變數~
uj5u.com熱心網友回復:
struct students{
char *name;
char *member;
char *state;
};
如果對指標記憶體分配不熟悉,還是建議用 char name[10] 這種方式
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/19161.html
標籤:C語言
上一篇:請各位大佬幫忙解決一個指標問題,需要輸出long long資料每兩個位元組的值
下一篇:學生成績管理系統
