簡體   English   中英

C編程構造運行時錯誤

[英]C Programming structs runtime error

createStructs()中已注釋掉的行給了我有關的錯誤。 我試圖掃描文本文件中的信息列表,這使我在加載文件后程序崩潰。 當它崩潰時,它會以一種非常奇怪的方式加載輸出。 這是我的代碼:

#define MAX 71
#define SIZE 14

typedef struct {
    char first[7]; 
    char initial[1]; 
    char last[9]; 
    char street[16]; 
    char city[11];
    char state[2]; 
    int zipcode[5]; 
    int age; 
    char sex[1]; 
    int tenure; 
    double salary;
} Employee;
    insert main method just calling the functions
    void strsub(char buf[], char sub[], int start, int end) {
    int i, j = 0;

    for (j = 0, i = start; i <= end; i++, j++) {
        sub[j] = buf[i];
    }
    sub[j] = '\0';
}

void createStructs(Employee inWorkers[]) {
    int i = 0;
    char buf[MAX];
    char temp[SIZE];
    if (!(fp = fopen("payfile.txt", "r"))) {
        printf("payfile.txt could not be opened for input.");
        exit(1);
    }

    while (!(feof(fp))) {
        fgets(buf, MAX, fp);
        strsub(buf, inWorkers[i].first, 0, 6);
        strsub(buf, inWorkers[i].initial, 8, 8);
        strsub(buf, inWorkers[i].last, 10, 18);
        strsub(buf, inWorkers[i].street, 20, 35);
        strsub(buf, inWorkers[i].city, 37, 47);
        strsub(buf, inWorkers[i].state, 49, 50);
        strsub(buf, temp, 52, 56);
        //inWorkers[i].zipcode = atoi(temp);
        strsub(buf, temp, 58, 59);
        inWorkers[i].age = atoi(temp);
        strsub(buf, inWorkers[i].sex, 61, 61);
        strsub(buf, temp, 63, 63);
        inWorkers[i].tenure = atoi(temp);
        strsub(buf, temp, 65, 70);
        inWorkers[i].salary = atof(temp);
        i++;
    }
}

void printNames(Employee workers[]) {
    for (int i = 0; i < SIZE; i++) {
        printf("%s %s %s %s %s %s %d %d %s %d %.2lf", workers[i].first, workers[i].initial, workers[i].last,
            workers[i].street, workers[i].city, workers[i].state, workers[i].zipcode, workers[i].age,
            workers[i].sex, workers[i].tenure, workers[i].salary);
    }
}

您的問題是您正在創建一個整數數組( int zipcode[5] )。 然后,您嘗試傳遞inworkers[i].zipcode atoi調用的結果。 這導致您為整數指針分配一個整數值。

如果您在編譯時沒有收到警告,我會感到非常驚訝。 第一步,您確實應該使用-Wall編譯並解決所有警告。

與其創建整數數組,不如不讓它成為整數值?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM