简体   繁体   English

从C中的结构打印Char数组

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

So, I'm trying to print an array defined in a structure, but somehow it won't work. 因此,我正在尝试打印结构中定义的数组,但是某种程度上它是行不通的。 Here is the code: 这是代码:

#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;
    }
}

}

I tried with printf and with puts, but nothing. 我尝试了printf和puts,但是什么也没有。 It's not working neither on function. 它在功能上也不起作用。 What should i do? 我该怎么办?

Your usage of strcpy() is wrong. 您对strcpy()是错误的。 &tabellone[0].name[MAXSTRING+1] points out-of-range and you must not access where it points. &tabellone[0].name[MAXSTRING+1]指向范围外,您不能访问指向的位置。

Change strcpy(&tabellone[0].name[MAXSTRING+1], "Via!"); 更改strcpy(&tabellone[0].name[MAXSTRING+1], "Via!"); to strcpy(tabellone[0].name, "Via!"); strcpy(tabellone[0].name, "Via!"); , strcpy(&tabellone[3].name[MAXSTRING+1], "Tassa Patrimoniale"); strcpy(&tabellone[3].name[MAXSTRING+1], "Tassa Patrimoniale"); to strcpy(tabellone[3].name, "Tassa Patrimoniale"); to strcpy(tabellone[3].name, "Tassa Patrimoniale"); , and like that for all of remaining dangerous accesses. ,以及所有其他危险访问权限。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM