首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C 語言 fscanf 讀取結構體數據時缺少取地址符導致錯誤

     編輯:程式設計疑難解答

錯誤代碼

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 定位內存錯誤
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved