---
name: "wcwidth"
section: "3"
platform: "macos"
package: "Libc"
version: "1752.120.2"
release: "macOS 26.5"
platforms: ["linux", "freebsd", "macos"]
url: "https://new.carta.tech/wcwidth"
---

# wcwidth(3)

number of column positions of a wide-character code

## NAME

**wcwidth**, **wcwidth\_l** – number of column positions of a wide-character code

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

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

*int*\

**wcwidth**(*wchar\_t wc*);

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

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

*int*\

**wcwidth\_l**(*wchar\_t wc*, *locale\_t loc*);

## DESCRIPTION

The **wcwidth**() function determines the number of column positions required to display the wide character *wc*.

Although the **wcwidth**() function uses the current locale, the **wcwidth\_l**() function may be passed a locale directly. See [xlocale(3)](/xlocale/3.md) for more information.

## RETURN VALUES

The **wcwidth**() function returns 0 if the *wc* argument is a null wide character (L'\\0'), -1 if *wc* is not printable; otherwise, it returns the number of column positions the character occupies.

## EXAMPLES

This code fragment reads text from standard input and breaks lines that are more than 20 column positions wide, similar to the [fold(1)](/fold/1.md) utility:

```
wint_t ch;
int column, w;
column = 0;
while ((ch = getwchar()) != WEOF) {
	w = wcwidth(ch);
	if (w > 0 && column + w >= 20) {
		putwchar(L'\n');
		column = 0;
	}
	putwchar(ch);
	if (ch == L'\n')
		column = 0;
	else if (w > 0)
		column += w;
}
```

## SEE ALSO

[iswprint(3)](/iswprint/3.md), [wcswidth(3)](/wcswidth/3.md), [xlocale(3)](/xlocale/3.md)

## STANDARDS

The **wcwidth**() function conforms to IEEE Std 1003.1-2001 (“POSIX.1”).
