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
overstdout
: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.