memchr
(with a little bit of your own wrapper code, ending with memcpy
) is the exact equivalent - like fgets
it takes a maximum length it will process (should be the min of the remaining input buffer size and the size of your output buffer) and scans until it hits the desired character (which will be '\n'
) or runs out of input/output space.
Note that for data already in a buffer in memory, though, you might want to skip the step of copying to a separate output buffer, unless you need to null-terminate the output without modifying the input. Many beginner C programmers often make the mistake of thinking they need null termination, when it would really suffice to just improve some of your interfaces to take a (pointer, length) pair, allowing you to pass/process substrings without copying them. For instance you can pass them to printf
using: printf("%.*s", (int)length, start);
c
andc++
... which is it? And how is your buffer defined? – Synecticsfopen
when it is straightforward to implement using them. – Lesseeflex
, it's blazingly fast and gets it right every time. It will give you both C and C++ outputs and you can write callbacks once you receive a token to your heart's content for either. – Pushup