从C中的结构打印Char数组

时间:2015-12-05 16:10:16

标签: 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,但没有。它在功能上都不起作用。我该怎么办?

1 个答案:

答案 0 :(得分:1)

您对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");更改为strcpy(tabellone[3].name, "Tassa Patrimoniale");,并将其更改为所有剩余的危险访问权限。