所以,我试图打印一个结构中定义的数组,但不知怎的,它不会起作用。这是代码:
#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,但没有。它在功能上都不起作用。我该怎么办?
答案 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");
,并将其更改为所有剩余的危险访问权限。