Check if field is empty, using custom read function in C

1
void vazio(void)
{
    char *str = NULL, c;//apontando para null
    int i = 0, j = 1;

    //alocação de memória para str
    str = (char *) malloc (sizeof(char));
    printf("Informe a string: ");
    //ler a string
    while (c != '\n')
    {
        c = getc(stdin);//ler a entrada padrão do teclado
        str = (char *) realloc (str, j*sizeof(char));//realocação de     memória 
        str[i] = c;//ler o caracter, fazendo apontar para c
        ++i;
        ++j;
    }
    str[i] = '
void vazio(void)
{
    char *str = NULL, c;//apontando para null
    int i = 0, j = 1;

    //alocação de memória para str
    str = (char *) malloc (sizeof(char));
    printf("Informe a string: ");
    //ler a string
    while (c != '\n')
    {
        c = getc(stdin);//ler a entrada padrão do teclado
        str = (char *) realloc (str, j*sizeof(char));//realocação de     memória 
        str[i] = c;//ler o caracter, fazendo apontar para c
        ++i;
        ++j;
    }
    str[i] = '%pre%';//marcar final da string com caracter nulo

    //gets(str);//usando gets, o escopo if é executado
    if((strlen(str) == 0) || (strcmp(str,"0") == 0))
    {
        printf("\aErro!\n");
        exit(EXIT_FAILURE);
    }
    //isto é executado, mas não imprime nada, ignorando o if acima
        printf("String: %s", str);

    free(str);//libera memória
    str = NULL;//evita o dangling pointers
}
';//marcar final da string com caracter nulo //gets(str);//usando gets, o escopo if é executado if((strlen(str) == 0) || (strcmp(str,"0") == 0)) { printf("\aErro!\n"); exit(EXIT_FAILURE); } //isto é executado, mas não imprime nada, ignorando o if acima printf("String: %s", str); free(str);//libera memória str = NULL;//evita o dangling pointers }
    
asked by anonymous 24.01.2015 / 01:41

1 answer

1

I had to make some changes to compile. The code even compiled in my compiler with the settings I use. I put a% of_de% within%% because the reallocation and addition of the character to string should only be done if the character is not ENTER . This character should always be scorned. When you type something up it works even if the intention is different. But when you do not type anything it creates a problem because string has size 1 that is occupied by if .

You can write this code better but you did not want to spoof your code any more.

void vazio(void) {
    char *str = NULL, c;//apontando para null
    int i = 0, j = 1;

    //alocação de memória para str
    str = malloc(1);
    printf("Informe a string: ");
    //ler a string
    while (c != '\n') {
        c = getc(stdin);//ler a entrada padrão do teclado
        if (c != '\n') {
            str = realloc(str, j);//realocação de     memória 
            str[i] = c;//ler o caracter, fazendo apontar para c
            ++i;
            ++j;
        }
    }
    str[i] = '
void vazio(void) {
    char *str = NULL, c;//apontando para null
    int i = 0, j = 1;

    //alocação de memória para str
    str = malloc(1);
    printf("Informe a string: ");
    //ler a string
    while (c != '\n') {
        c = getc(stdin);//ler a entrada padrão do teclado
        if (c != '\n') {
            str = realloc(str, j);//realocação de     memória 
            str[i] = c;//ler o caracter, fazendo apontar para c
            ++i;
            ++j;
        }
    }
    str[i] = '%pre%';//marcar final da string com caracter nulo

    //gets(str);//usando gets, o escopo if é executado
    if((strlen(str) == 0) || (strcmp(str, "0") == 0)) {
        printf("\aErro!\n");
        exit(EXIT_FAILURE);
    }
    //isto é executado, mas não imprime nada, ignorando o if acima
    printf("String: %s", str);

    free(str);//libera memória
    str = NULL;//evita o dangling pointers
}
';//marcar final da string com caracter nulo //gets(str);//usando gets, o escopo if é executado if((strlen(str) == 0) || (strcmp(str, "0") == 0)) { printf("\aErro!\n"); exit(EXIT_FAILURE); } //isto é executado, mas não imprime nada, ignorando o if acima printf("String: %s", str); free(str);//libera memória str = NULL;//evita o dangling pointers }

See running on ideone .

You are using old, unnecessary C programming techniques.

    
24.01.2015 / 02:12