---
name: "pmstrncpy"
section: "3"
platform: "linux"
package: "pcp"
version: "7.2.2-2"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/pmstrncpy"
---

# pmstrncpy(3)

safe string copy

## NAME

**pmstrncpy** - safe string copy

## C SYNOPSIS

**#include \<pcp/pmapi.h\>**

**int pmstrncpy(char \****dest***, size\_t** *destlen***, char \****src***);**

**cc ... -lpcp**

## DESCRIPTION

**pmstrncpy** is safe string copying routine with semantics similar to [**strncpy**(3)](/strncpy/3.md).

The main differences between **pmstrncpy** and [**strncpy**(3)](/strncpy/3.md) are:

- •

  *src* must be null-byte terminated for **pmstrncpy**

- •

  **pmstrncpy** ensures that *dest* is null-byte terminated, even when *src* is larger than *destlen*; this may result in truncated copying of *src*

- •

  when *src* is shorter than *destlen* **pmstrncpy** does not null-byte fill the remainder of *dest* after *src* has been copied and null-byte terminated

- •

  the length argument has the same semantics for **pmstrncpy** and [**pmstrncat**(3)](/pmstrncat/3.md), unlike [**strncpy**(3)](/strncpy/3.md) and [**strncat**(3)](/strncat/3.md).

- •

  the return value from **pmstrncpy** is useful

- •

  the order of the arguments for **pmstrncpy** has been *deliberately* changed from the order of the arguments for [**strncpy**(3)](/strncpy/3.md) to avoid accidental misuse that a compiler can easily detect

On success, **pmstrncpy** returns 0, else -1 indicates that *src* is too big and the result been truncated to ensure *dest* has not been overrun.

## HISTORY

[**strncpy**(3)](/strncpy/3.md) first appeared in Edition 7 AT&T Unix around 1979. It was specifically crafted to copy file names from component names from on-disk directory entries that were of a fixed maximum size and may have zero, one or more trailing null-bytes

The subsequent attempts to use [**strncpy**(3)](/strncpy/3.md) for more generally string copying operations has been fraught with abuse and security issues; **pmstrncpy** is an attempt to address these problems.

## SEE ALSO

[**PMAPI**(3)](/PMAPI/3.md), [**pmstrncat**(3)](/pmstrncat/3.md), [**strncat**(3)](/strncat/3.md) and [**strncpy**(3)](/strncpy/3.md).
