Search code examples
cstringcomparisonstartswith

How to check if a string starts with another string in C?


Is there something like startsWith(str_a, str_b) in the standard C library?

It should take pointers to two strings that end with nullbytes, and tell me whether the first one also appears completely at the beginning of the second one.

Examples:

"abc", "abcdef" -> true
"abcdef", "abc" -> false
"abd", "abdcef" -> true
"abc", "abc"    -> true

Solution

  • Apparently there's no standard C function for this. So:

    bool startsWith(const char *pre, const char *str)
    {
        size_t lenpre = strlen(pre),
               lenstr = strlen(str);
        return lenstr < lenpre ? false : memcmp(pre, str, lenpre) == 0;
    }
    

    Note that the above is nice and clear, but if you're doing it in a tight loop or working with very large strings, it does not offer the best performance, as it scans the full length of both strings up front (strlen). Solutions like wj32's or Christoph's may offer better performance (although this comment about vectorization is beyond my ken of C). Also note Fred Foo's solution which avoids strlen on str (he's right, it's unnecessary if you use strncmp instead of memcmp). Only matters for (very) large strings or repeated use in tight loops, but when it matters, it matters.