What is bzero in c

Last updated: April 1, 2026

Quick Answer: bzero() is a C library function that sets all bytes in a memory block to zero. Declared in <strings.h>, it takes a memory pointer and size as arguments. Modern C programs typically use memset() instead, as bzero() is considered deprecated.

Key Facts

Overview

bzero() is a legacy C function used for clearing memory by setting all bytes to zero. Originating from BSD Unix systems, it has been widely used in Unix and Linux programming for decades. The function provides a simple, efficient way to initialize memory blocks without requiring the flexibility of more general-purpose functions.

Function Syntax

The bzero() function has a straightforward declaration: void bzero(void *s, size_t n). The first parameter 's' is a void pointer to the memory block to be zeroed, while 'n' specifies the number of bytes to set to zero. The function returns void, meaning it performs the operation in-place and doesn't return a value.

How bzero() Works

When called, bzero() iterates through the specified memory region and sets each byte to the value 0. This is useful for initializing structures, arrays, or buffers before use. Unlike calloc(), which allocates memory already zeroed, bzero() operates on pre-allocated memory that needs to be cleared.

Usage Example

A typical usage pattern might be clearing a struct: bzero(&my_struct, sizeof(my_struct)). This zeros out all members of the structure, useful when you want to ensure no garbage values exist in uninitialized fields. Another common use is clearing character buffers: bzero(buffer, BUFFER_SIZE).

Historical Context and Deprecation

While bzero() was standard in BSD systems and widely used in Unix-like operating systems, it was never officially part of the C standard library. With the evolution of C standards and POSIX specifications, memset() became the recommended replacement. Modern coding standards and static analysis tools flag bzero() usage as outdated, encouraging developers to migrate to memset() for portability.

Alternatives and Modern Practice

The recommended modern equivalent is memset(s, 0, n), which is part of the C standard library and more portable across different platforms. For C11 and later, memset_s() provides a secure variant. Additionally, C99 introduced designated initializers and compound literals that can safely zero memory without explicit function calls in many scenarios.

Related Questions

What is the difference between bzero() and memset()?

bzero() only sets bytes to zero and takes two parameters, while memset() can set any byte value and is part of standard C. memset(ptr, 0, n) is equivalent to bzero(ptr, n) but memset() is more portable and recommended.

Why is bzero() considered deprecated in modern C programming?

bzero() was never officially standardized in the C language specification and was removed from POSIX. Modern coding standards recommend memset() for portability across different compilers and platforms.

Is bzero() still available in modern C libraries?

Yes, bzero() remains available in most Unix-like systems for backward compatibility, but its use is discouraged. Most modern systems still provide it in <strings.h> for legacy code support.

Sources

  1. Wikipedia - String.h Legacy Functions CC-BY-SA-3.0
  2. Linux Man Pages - bzero(3) GPL