How to create a string array in C?

Asked

Viewed 2,004 times

-1

My code is giving error in lines 15 and 53

#include<stdio.h>
#include<conio.h>
#include<locale.h>

int main()
{
    setlocale(LC_ALL,"portuguese");

    struct datas{

        int dia;
        int mes;
        int ano;

        char meses[12] = {'Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'};


    };

    struct datas data;

    printf("\nInforme a data:\n\n");

    printf(" Dia..: "); scanf("%i", &data.dia); 
    printf(" Mês..: "); scanf("%i", &data.mes);
    printf(" Ano..: "); scanf("%i", &data.ano);

    //verificação de erros

    if(data.dia >31|| data.dia<1)
    {
        printf("Uma mês tem no máximo 31 dias\nTente novamente.");  sleep(3);   system("cls");
        main(); 
    }

    else if(data.mes >12 ||data.mes <1)
    {
        printf("Um ano tem 12 meses\nTente novamente.");    sleep(3); system("cls");
        main();
    }

    else if(data.ano < 1900 || data.ano > 3000)

    {
        printf("Valor de ano fora da realidade\nTente novamente."); sleep(3);   system("cls");
        main();
    }

    system("cls");



    printf("\nHoje é dia %i de %s de %i\n\n", data.dia, data.meses[data.mes], data.ano);
}

2 answers

2

I believe the error is caused by this:

char meses[12]

How a char represents a character, when you point to meses[31], or something like that, you’re pointing to something that doesn’t exist. I’m not experienced in C, but if you follow the logic of Java, I’d substitute it for that:

char meses[12][20]

Where, according to my bizarre logic, you could have 12 strings of 20 characters, or something like.

Obs.: and if you used Numerators for the months, would not give more stability? Java works (like I said, I’m new to C, so my logic may sound a little weird sometimes)...

2

Maybe it’s better to implement your strut: First: Put the month matrix out of the struct, and the matrix should have the amount of records and the maximum size of each (char matrix[Quat values][tam max]), the way you’re implementing, This becomes clearer when using memory allocation with malloc. I hope it helped you.

struct datas{
int dia;
int mes;
int ano;
};
struct datas data;

char meses[12]10] = "Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"};

Browser other questions tagged

You are not signed in. Login or sign up in order to post.