簡體   English   中英

從C中的結構打印Char數組

[英]Printing a Char Array from a structure in C

因此,我正在嘗試打印結構中定義的數組,但是某種程度上它是行不通的。 這是代碼:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#define MAXSTRING 25
#define MAXTAB 40

typedef enum {Via, Tassa, Imprevisti, Transito, Probabilita, Posteggio, Prigione} Info;
typedef enum {Simone, Gianluca, Alessandro, Carlo} Owners;

typedef struct {
char name[MAXSTRING+1];
_Bool availability;
Owners tOwner;
int value;
Info infoAgg;
} Casella;

void printInfo (Casella [], int i);

int main() {

Casella tabellone[MAXTAB];

strcpy(&tabellone[0].name[MAXSTRING+1], "Via!");
tabellone[0].availability = false;
tabellone[0].infoAgg = Via;

strcpy(&tabellone[3].name[MAXSTRING+1], "Tassa Patrimoniale");
tabellone[3].availability = false;
tabellone[3].infoAgg = Tassa;

strcpy(&tabellone[7].name[MAXSTRING+1], "Probabilita'");
tabellone[7].availability = false;
tabellone[7].infoAgg = Probabilita;

strcpy(&tabellone[10].name[MAXSTRING+1], "Prigione");
tabellone[10].availability = false;
tabellone[10].infoAgg = Prigione;

strcpy(&tabellone[13].name[MAXSTRING+1], "Tassa Sughiollu");
tabellone[13].availability = false;
tabellone[13].infoAgg = Tassa;

strcpy(&tabellone[15].name[MAXSTRING+1], "Imprevisti");
tabellone[15].availability = false;
tabellone[15].infoAgg = Imprevisti;

strcpy(&tabellone[17].name[MAXSTRING+1], "Tassa XD");
tabellone[17].availability = false;
tabellone[17].infoAgg = Tassa;

strcpy(&tabellone[19].name[MAXSTRING+1], "PosteggioGratuito");
tabellone[19].availability = false;
tabellone[19].infoAgg = Posteggio;

strcpy(&tabellone[5].name[MAXSTRING+1], "Via Simone");
tabellone[5].availability = true;
tabellone[5].tOwner = Simone;
tabellone[5].value = 100;

printInfo(tabellone, 5);

printf("%s\n", tabellone[5].name);

puts(tabellone[5].name);

return 0;
}

void printInfo (Casella arr[], int pos){

puts(arr[pos].name);

if (arr[pos].availability == true)
    printf("\nAvailability: Acquistabile\n");
else
    printf("\nAvailability: Non acquistabile\n");


if (arr[pos].availability == true){
    switch (arr[pos].tOwner) {
        case Simone:
            printf("Proprietario: Simone\n"); break;
        case Gianluca:
            printf("Proprietario: Gianluca\n"); break;
        case Alessandro:
            printf("Proprietario: Alessandro\n"); break;
        case Carlo:
            printf("Proprietario: Carlo\n"); break;
    }
    printf("Valore: %d\n", arr[pos].value);
} else {
    switch (arr[pos].infoAgg){
        case Via:
            printf("Tipo terreno: Via!\n"); break;
        case Tassa:
            printf("Tipo terreno: Tassa\n"); break;
        case Imprevisti:
            printf("Tipo terreno: Imprevisti\n"); break;
        case Posteggio:
            printf("Tipo terreno: Posteggio Gratuito\n"); break;
        case Prigione:
            printf("Tipo terreno: Prigione\n"); break;
        case Transito:
            printf("Tipo terreno: Transito\n"); break;
        case Probabilita:
            printf("Tipo terreno: Probabilita'\n"); break;
    }
}

}

我嘗試了printf和puts,但是什么也沒有。 它在功能上也不起作用。 我該怎么辦?

您對strcpy()是錯誤的。 &tabellone[0].name[MAXSTRING+1]指向范圍外,您不能訪問指向的位置。

更改strcpy(&tabellone[0].name[MAXSTRING+1], "Via!"); strcpy(tabellone[0].name, "Via!"); strcpy(&tabellone[3].name[MAXSTRING+1], "Tassa Patrimoniale"); to strcpy(tabellone[3].name, "Tassa Patrimoniale"); ,以及所有其他危險訪問權限。

暫無
暫無

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

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