I have a buffer which I receive through a serial port. When I receive a certain character, I know a full line has arrived, and I want to print it with printf method. But each line has a different length value, and when I just go with:
printf("%s", buffer);
I’m printing the line plus additional chars belonging to the former line (if it was longer than the current one).
I read here that it is possible, at least in C++, to tell how much chars you want to read given a %s, but it has no examples and I don’t know how to do it in C. Any help?
I think I have three solutions:
- printing char by char with a
forloop - using the termination character
- or using .*
QUESTION IS: Which one is faster? Because I’m working on a microchip PIC and I want it to happen as fast as possible
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
fwriteoverstdout:This works because
fwriteis 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:
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.