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.