---
name: "strnstr"
section: "3"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["linux", "freebsd"]
url: "https://new.carta.tech/strcasestr"
---

# strnstr(3)

locate a substring in a string

Part of [strcasestr(3)](/strcasestr/3.md).

## NAME

**strstr**, **strcasestr**, **strnstr** – locate a substring in a string

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

**#include \<string.h\>**

*QChar \**\

**strstr**(*QChar \*big*, *const char \*little*);

*QChar \**\

**strcasestr**(*QChar \*big*, *const char \*little*);

*QChar \**\

**strnstr**(*QChar \*big*, *const char \*little*, *size\_t len*);

**#include \<string.h\>**

**#include \<xlocale.h\>**

*QChar \**\

**strcasestr\_l**(*QChar \*big*, *const char \*little*, *locale\_t loc*);

## DESCRIPTION

The **strstr**() function locates the first occurrence of the null-terminated string *little* in the null-terminated string *big*.

The **strcasestr**() function is similar to **strstr**(), but ignores the case of both strings.

The **strcasestr\_l**() function does the same as **strcasestr**() but takes an explicit locale rather than using the current locale.

The **strnstr**() function locates the first occurrence of the null-terminated string *little* in the string *big*, where not more than *len* characters are searched. Characters that appear after a ‘\\0’ character are not searched. Since the **strnstr**() function is a FreeBSD specific API, it should only be used when portability is not a concern.

## RETURN VALUES

If *little* is an empty string, *big* is returned; if *little* occurs nowhere in *big*, NULL is returned; otherwise a pointer to the first character of the first occurrence of *little* is returned.

## EXAMPLES

The following sets the pointer *ptr* to the "Bar Baz" portion of *largestring*:

```
const char *largestring = "Foo Bar Baz";
const char *smallstring = "Bar";
char *ptr;
ptr = strstr(largestring, smallstring);
```

The following sets the pointer *ptr* to NULL, because only the first 4 characters of *largestring* are searched:

```
const char *largestring = "Foo Bar Baz";
const char *smallstring = "Bar";
char *ptr;
ptr = strnstr(largestring, smallstring, 4);
```

## SEE ALSO

[memchr(3)](/memchr/3.md), [memmem(3)](/memmem/3.md), [strchr(3)](/strchr/3.md), [strcspn(3)](/strcspn/3.md), [strpbrk(3)](/strpbrk/3.md), [strrchr(3)](/strrchr/3.md), [strsep(3)](/strsep/3.md), [strspn(3)](/strspn/3.md), [strtok(3)](/strtok/3.md), [wcsstr(3)](/wcsstr/3.md)

## STANDARDS

The **strstr**() function conforms to ISO/IEC 9899:2024 (“ISO C23”), where it is specified as a qualifier-preserving function.

The **strcasestr**() function is a GNU extension, and the **strnstr**() function is a BSD extension. Like the qualifier-preserving functions in ISO/IEC 9899:2024 (“ISO C23”), FreeBSD implements

## HISTORY

The **strnstr**() function was introduced by FreeBSD 4.5 and is non-standard.
