Comprimento duma string formatada

Para um printf("Vamos dizer %s\n", "ola") não precisamos sequer pensar qual o comprimento final do texto a imprimir, porque o recurso “não tem” limitação de espaço. Mas e quando queremos armazenar o resultado em memória?

Para armazenar em memória precisamos saber qual o tamanho do “slot” a alocar, mas se ainda não conhecemos o resultado final eventualmente o melhor que podemos fazer é alguma aritmética menos automática:

comprimento("Vamos dizer %s\n") - comprimento("%s") + comprimento("ola")

O bom é que isto pode ser automatizado.

Exemplo na linguagem C

#include <stdio.h>
#include <stdlib.h>
 
int main (int argc, char *argv[])
{
    size_t length;
    char *string;
 
    // magic comes here
    length = snprintf(NULL,0,"Vamos dizer %s\n", "ola");
 
    // one extra byte to the '\0' character
    string = malloc(length + 1);
 
    snprintf(string,length + 1,"Vamos dizer %s\n", "ola");
 
    printf("Comprimento: %d\n",length);
    printf("Mensagem: %s\n", string);
 
    free(string);
 
    return 0;
}

Referência: http://stackoverflow.com/a/10533616/3640825

Leave a Comment.

− three = 1