ZetCode

C strcspn function

last modified April 8, 2025

String operations are fundamental in C programming, and strcspn is a key function for scanning strings. This tutorial covers strcspn in depth, including its syntax, usage, and practical applications. We'll explore examples demonstrating how to find the first occurrence of any character from a set. Understanding strcspn helps with input validation and string parsing tasks in C programs.

What Is strcspn?

The strcspn function calculates the length of the initial segment of a string that contains no characters from a specified set. It's declared in string.h and takes two parameters: the string to scan and the set of characters to reject. The function returns the number of characters before the first match. For security-critical code, consider validating input strings before passing them to strcspn.

Basic strcspn Usage

This example demonstrates finding the length of a substring before any vowel.

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

int main() {
    const char *str = "Hello, World!";
    const char *reject = "aeiouAEIOU";
    
    size_t len = strcspn(str, reject);
    
    printf("String: %s\n", str);
    printf("Length before first vowel: %zu\n", len);
    
    return 0;
}

Here, strcspn scans str until it finds any vowel from reject. It returns 1 because 'e' is the first vowel at position 1. The %zu format specifier correctly prints size_t values. This is useful for finding prefixes or validating string formats.

Finding the First Digit

This example shows how to locate the first digit in a string.

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

int main() {
    const char *input = "User1234";
    const char *digits = "0123456789";
    
    size_t pos = strcspn(input, digits);
    
    if (input[pos] != '\0') {
        printf("First digit '%c' at position %zu\n", input[pos], pos);
    } else {
        printf("No digits found\n");
    }
    
    return 0;
}

The code scans input until it finds any digit character. It returns 4 because '1' is the first digit at position 4. We check if the character at the returned position is not null to confirm a digit was found. This technique is useful for parsing mixed alphanumeric strings.

Validating Input Without Special Characters

This example demonstrates input validation using strcspn.

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

int main() {
    const char *username = "john_doe";
    const char *invalid_chars = "!@#$%^&*()";
    
    if (strcspn(username, invalid_chars) == strlen(username)) {
        printf("Valid username\n");
    } else {
        printf("Invalid character found\n");
    }
    
    return 0;
}

Here, we check if username contains any invalid characters. If strcspn returns the string length, no invalid characters were found. This is a simple way to validate strings against character blacklists. For production code, consider more robust validation functions.

Extracting Tokens Before Delimiters

This example shows how to extract a token before any delimiter.

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

int main() {
    const char *path = "/home/user/documents";
    const char *delimiters = "/\\";
    
    size_t len = strcspn(path + 1, delimiters);
    char dirname[20];
    
    strncpy(dirname, path + 1, len);
    dirname[len] = '\0';
    
    printf("First directory: %s\n", dirname);
    
    return 0;
}

The code finds the first directory name in a Unix path by scanning past the initial slash. strcspn returns the length before the next slash or backslash. We copy this substring to dirname and null-terminate it. This technique is useful for simple path parsing tasks.

Finding the First Whitespace Character

This example locates the first whitespace character in a string.

find_whitespace.c
#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main() {
    const char *text = "Find the first space";
    const char *whitespace = " \t\n\r\f\v";
    
    size_t pos = strcspn(text, whitespace);
    
    printf("First whitespace at position: %zu\n", pos);
    printf("Word before whitespace: %.*s\n", (int)pos, text);
    
    return 0;
}

The code scans text until it finds any whitespace character. The %.*s format prints the first word by specifying maximum length. This demonstrates how strcspn can help with basic text processing. For complex parsing, consider regular expressions or dedicated parsing libraries.

Best Practices for Using strcspn

Source

C strcspn Documentation

This tutorial has explored the strcspn function, from basic usage to practical applications. While simple, it's powerful for string scanning tasks when used correctly. Always consider security implications when processing untrusted input strings.

Author

My name is Jan Bodnar, and I'm a dedicated programmer with a deep passion for coding. Since 2007, I've been sharing my expertise through over 1,400 articles and 8 e-books. With more than a decade of teaching experience, I strive to make programming accessible and engaging.

List C Standard Library.