struct student {
int number;
} num;
int main() {
struct student s1, *s2;
s2 = &s1;
FILE *fp = fopen("test.txt", "r");
fscanf(fp, "%d", s2->number); // 錯誤:缺少 &
return 0;
}
fscanf 需要參數為變量地址以便寫入數據。s2->number 是 int 值,而非地址,導致未定義行為(通常崩潰或寫入錯誤內存)。
fscanf(fp, "%d", &(s2->number));
// 或
fscanf(fp, "%d", &s1.number);
#include <stdio.h>
struct student {
int number;
};
int main() {
struct student s1;
FILE *fp = fopen("test.txt", "r");
if (fp == NULL) {
perror("打開文件失敗");
return 1;
}
if (fscanf(fp, "%d", &s1.number) != 1) {
fprintf(stderr, "讀取失敗\n");
} else {
printf("讀取到學號: %d\n", s1.number);
}
fclose(fp);
return 0;
}
fopen 返回值fscanf 返回值(成功讀取的項目數)gdb 或 valgrind 定位內存錯誤