• [^] # Re: Aaah ! STRING$

    Posté par . En réponse au message Comment répeter un caractère avec printf. Évalué à 1.

    euh... length n'est jamais affecté, c'est normal ?!

    version plus efficace... et commentée.
    merci quand même pour ta réponse Obsidian mais je voulais faire plus simple sans alloc...


    const char *chrstr( const char c, unsigned int l)
    {
    static unsigned int length = 0;
    static char * buffer = NULL;

    // par convention si l == 0 on souhaite dallouer le buffer
    // si il existe
    if( 0 == l && buffer != NULL) {
    #if defined(DEBUG)
    fprintf(stdout, "\nDEBUG: on souhaite simplement faire du mnage. (Buffer[0x%x])", buffer);
    #endif
    free(buffer); buffer = NULL; goto BAIL;
    }

    ++l; // Pour le '0円' final.

    if( l > length && buffer != NULL) {
    #if defined(DEBUG)
    fprintf(stdout, "\nDEBUG: le buffer allou est trop petit. (Buffer[0x%x])", buffer);
    #endif
    free (buffer);
    buffer = NULL;
    }
    #if defined(DEBUG)
    else {
    fprintf(stdout, "\nDEBUG: pas de rallocation ncessaire. (Buffer[0x%x])", buffer);
    }
    #endif

    if( NULL == buffer) {
    length = l;
    buffer = (char *) calloc( l, sizeof(char));
    #if defined(DEBUG)
    fprintf(stdout, "\nDEBUG: allocation d'un nouveau buffer[0x%x].", buffer);
    #endif
    }

    if( NULL != buffer) {
    buffer[--l] = '0円';
    while(l) buffer[--l] = c;
    }

    BAIL:
    return (const char *)buffer;
    }