因此,我正在尝试打印结构中定义的数组,但是某种程度上它是行不通的。这是代码:

#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");更改为strcpy(tabellone[3].name, "Tassa Patrimoniale");,对于所有其他危险的访问权限,均应这样做。

关于c - 从C中的结构打印Char数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34107629/

10-10 21:23
查看更多