Printf a buffer of char with length in C

You can either add a null character after your termination character, and your printf will work, or you can add a '.*' in your printf statement and provide the length

printf("%.*s",len,buf);

In C++ you would probably use the std::string and the std::cout instead, like this:

std::cout << std::string(buf,len);

If all you want is the fastest speed and no formatting -- then use

fwrite(buf,1,len,stdout);

The string you have is not null-terminated, so, printf (and any other C string function) cannot determine its length, thus it will continue to write the characters it finds there until it stumbles upon a null character that happens to be there.

To solve your problem you can either:

  • use fwrite over stdout:

    fwrite(buffer, buffer_length, 1, stdout);
    

    This works because fwrite is not thought for printing just strings, but any kind of data, so it doesn't look for a terminating null character, but accepts the length of the data to be written as a parameter;

  • null-terminate your buffer manually before printing:

    buffer[buffer_length]=0;
    printf("%s", buffer); /* or, slightly more efficient: fputs(buffer, stdout); */
    

    This could be a better idea if you have to do any other string processing over buffer, that will now be null-terminated and so manageable by normal C string processing functions.

Tags:

C

Printf

Buffer