# strstr

From cppreference.com
< c‎ | string‎ | byte

Defined in header `<string.h>` |  |
char *strstr( const char *str, const char *substr ); | (1) |
/*QChar*/ *strstr( /*QChar*/ *str, const char *substr ); | (2) | (since C23)

1) Finds the first occurrence of the null-terminated byte string pointed to by `substr` in the null-terminated byte string pointed to by `str`. The terminating null characters are not compared.
2) Type-generic function equivalent to (1). Let `T` be an unqualified character object type.

  - If `str` is of type const T*, the return type is const char*.
  - Otherwise, if `str` is of type T*, the return type is char*.
  - Otherwise, the behavior is undefined.

If a macro definition of each of these generic functions is suppressed to access an actual function (e.g. if (strstr) or a function pointer is used), the actual function declaration (1) becomes visible.

The behavior is undefined if either `str` or `substr` is not a pointer to a null-terminated byte string.

### Parameters

str | - | pointer to the null-terminated byte string to examine
substr | - | pointer to the null-terminated byte string to search for

### Return value

Pointer to the first character of the found substring in `str`, or a null pointer if such substring is not found. If `substr` points to an empty string, `str` is returned.

### Example

Run this code

    #include <string.h>
    #include <stdio.h>

    void find_str(char const *str, char const *substr)
    {
        char *pos = strstr(str, substr);
        pos ? printf("found the string '%s' in '%s' at position %td\n",
                     substr, str, pos - str)
            : printf("the string '%s' was not found in '%s'\n",
                     substr, str);
    }

    int main(void)
    {
        char *str = "one two three";
        find_str(str, "two");
        find_str(str, "");
        find_str(str, "nine");
        find_str(str, "n");

        return 0;
    }

Output:

    found the string 'two' in 'one two three' at position 4
    found the string '' in 'one two three' at position 0
    the string 'nine' was not found in 'one two three'
    found the string 'n' in 'one two three' at position 1

### References

- C17 standard (ISO/IEC 9899:2018):

  - 7.24.5.7 The strstr function (p: 269)

- C11 standard (ISO/IEC 9899:2011):

  - 7.24.5.7 The strstr function (p: 369)

- C99 standard (ISO/IEC 9899:1999):

  - 7.21.5.7 The strstr function (p: 332)

- C89/C90 standard (ISO/IEC 9899:1990):

  - 4.11.5.7 The strstr function

### See also

strchr | finds the first occurrence of a character (function)
strrchr | finds the last occurrence of a character (function)

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=c/string/byte/strstr&oldid=146090"