C strchr Function

Table of Contents

What is strchr()?

The strchr() function finds the first occurrence of a specific character in a string and returns a pointer to that position. If the character is not found, it returns NULL.

Header File

#include <string.h>

Syntax

char *strchr(const char *str, int c);
ParameterDescription
strString to search in
cCharacter to find (passed as int, treated as char)

Return Value

Return ValueMeaning
PointerPoints to first occurrence of character
NULLCharacter not found in string

Basic Examples

Example 1: Find First Occurrence

#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello World";
char *ptr = strchr(str, 'o');
if(ptr != NULL) {
printf("Found 'o' at position: %ld\n", ptr - str);  // 4
printf("From 'o' onward: %s\n", ptr);  // o World
}
return 0;
}

Example 2: Character Not Found

#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello";
char *ptr = strchr(str, 'z');
if(ptr == NULL) {
printf("Character 'z' not found in '%s'\n", str);
}
return 0;
}

Example 3: Finding Space Character

#include <stdio.h>
#include <string.h>
int main() {
char sentence[] = "Cloud Computing is powerful";
char *space = strchr(sentence, ' ');
if(space != NULL) {
printf("First space at position: %ld\n", space - sentence);  // 5
printf("First word: ");
for(int i = 0; i < space - sentence; i++) {
printf("%c", sentence[i]);  // Cloud
}
printf("\n");
}
return 0;
}

Practical Examples

Example 4: Count Character Occurrences

#include <stdio.h>
#include <string.h>
int main() {
char str[] = "programming";
char search = 'm';
int count = 0;
char *ptr = str;
while((ptr = strchr(ptr, search)) != NULL) {
count++;
ptr++;  // Move to next character
}
printf("Character '%c' appears %d times in '%s'\n", 
search, count, str);  // 2 times
return 0;
}

Example 5: Extract File Extension

#include <stdio.h>
#include <string.h>
int main() {
char filename[] = "document.pdf";
char *dot = strchr(filename, '.');
if(dot != NULL) {
printf("Filename: %s\n", filename);
printf("Extension: %s\n", dot + 1);  // pdf
printf("Name without extension: ");
for(int i = 0; i < dot - filename; i++) {
printf("%c", filename[i]);  // document
}
printf("\n");
} else {
printf("No extension found\n");
}
return 0;
}

Example 6: Parse URL or Path

#include <stdio.h>
#include <string.h>
int main() {
char url[] = "https://example.com/page.html";
// Find protocol separator
char *colon = strchr(url, ':');
if(colon != NULL) {
printf("Protocol: ");
for(int i = 0; i < colon - url; i++) {
printf("%c", url[i]);  // https
}
printf("\n");
// Find domain after ://
char *slash = strchr(colon + 3, '/');
if(slash != NULL) {
printf("Domain: ");
for(int i = colon + 3; i < slash - url; i++) {
printf("%c", url[i]);  // example.com
}
printf("\n");
printf("Path: %s\n", slash);  // /page.html
}
}
return 0;
}

Example 7: Email Validation (Simple)

#include <stdio.h>
#include <string.h>
int main() {
char email[] = "[email protected]";
char *at = strchr(email, '@');
if(at != NULL) {
printf("Valid email format\n");
printf("Username: ");
for(int i = 0; i < at - email; i++) {
printf("%c", email[i]);  // user
}
printf("\n");
printf("Domain: %s\n", at + 1);  // example.com
} else {
printf("Invalid email - missing '@'\n");
}
return 0;
}

Example 8: Remove Trailing Newline

#include <stdio.h>
#include <string.h>
int main() {
char input[100];
printf("Enter text: ");
fgets(input, sizeof(input), stdin);
// Find newline and replace with null terminator
char *newline = strchr(input, '\n');
if(newline != NULL) {
*newline = '\0';
}
printf("You entered: '%s'\n", input);
printf("Length: %lu\n", strlen(input));
return 0;
}

Example 9: Split String at Character

#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Apple,Banana,Orange,Grape";
char *comma;
printf("Original: %s\n", str);
// Find first comma
comma = strchr(str, ',');
if(comma != NULL) {
*comma = '\0';  // Replace comma with null terminator
printf("First fruit: %s\n", str);  // Apple
printf("Remaining: %s\n", comma + 1);  // Banana,Orange,Grape
}
return 0;
}

Example 10: Find Multiple Characters

#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello World!";
char chars[] = "aeiou";  // vowels to find
int found = -1;
// Find first vowel in string
for(int i = 0; chars[i] != '\0'; i++) {
char *ptr = strchr(str, chars[i]);
if(ptr != NULL) {
int pos = ptr - str;
if(found == -1 || pos < found) {
found = pos;
}
}
}
if(found != -1) {
printf("First vowel found at position %d: '%c'\n", 
found, str[found]);  // 'e' at position 1
}
return 0;
}

strchr() vs Related Functions

FunctionPurposeFinds
strchr()First occurrenceCharacter
strrchr()Last occurrenceCharacter
strstr()First occurrenceSubstring
strpbrk()First of any charactersSet of characters

Example: strchr vs strrchr

#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Cloud Computing Cloud";
char *first = strchr(str, 'C');
char *last = strrchr(str, 'C');
printf("String: %s\n", str);
printf("First 'C': position %ld - %s\n", first - str, first);
printf("Last 'C': position %ld - %s\n", last - str, last);
return 0;
}
/* Output:
First 'C': position 0 - Cloud Computing Cloud
Last 'C': position 16 - Cloud
*/

Example: strchr vs strpbrk

#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello World!";
// strchr - finds single character
char *space = strchr(str, ' ');
printf("strchr space: %s\n", space);  // " World!"
// strpbrk - finds any character from set
char *found = strpbrk(str, "aeiou");
printf("strpbrk vowel: %s\n", found);  // "ello World!"
return 0;
}

Manual Implementation

#include <stdio.h>
char *my_strchr(const char *str, int c) {
while(*str != '\0') {
if(*str == (char)c) {
return (char*)str;  // Found
}
str++;
}
// Check if searching for null terminator
if(c == '\0') {
return (char*)str;
}
return NULL;  // Not found
}
int main() {
char str[] = "Programming";
char *ptr1 = my_strchr(str, 'g');
char *ptr2 = my_strchr(str, 'z');
if(ptr1) printf("Found 'g': %s\n", ptr1);  // "gramming"
if(!ptr2) printf("'z' not found\n");
return 0;
}

Finding Null Terminator (Special Case)

#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello";
// strchr can find null terminator
char *end = strchr(str, '\0');
if(end != NULL) {
printf("Null terminator at position: %ld\n", end - str);  // 5
printf("String length: %ld\n", strlen(str));  // 5
}
return 0;
}

Common Use Cases

1. Check if Character Exists

if(strchr("yesno", 'y') != NULL) {
printf("Character found\n");
}

2. Get Substring After Character

char *ptr = strchr(text, '@');
if(ptr) {
char *domain = ptr + 1;  // After @
}

3. Remove All Occurrences

#include <stdio.h>
#include <string.h>
void remove_char(char *str, char remove) {
char *read = str;
char *write = str;
while(*read) {
if(*read != remove) {
*write = *read;
write++;
}
read++;
}
*write = '\0';
}
int main() {
char text[] = "Hello World";
remove_char(text, 'o');
printf("%s\n", text);  // Hell Wrld
return 0;
}

4. Validate Character Set

#include <stdio.h>
#include <string.h>
int main() {
char password[] = "Pass123!";
char special[] = "!@#$%";
int has_special = 0;
for(int i = 0; special[i]; i++) {
if(strchr(password, special[i])) {
has_special = 1;
break;
}
}
if(has_special) {
printf("Password contains special character\n");
} else {
printf("Password needs a special character\n");
}
return 0;
}

Common Mistakes

MistakeWrong CodeCorrect Code
Forgetting headerNo include#include <string.h>
Wrong return typechar c = strchr(str, 'a');char *ptr = strchr(str, 'a');
Modifying string literalstrchr("Hi", 'H')[0] = 'h';Use array: char str[]="Hi";
Not checking NULL*strchr(str,'z')Check if(ptr != NULL)

Quick Reference

TaskCode
Find first 'x'char *p = strchr(str, 'x');
Check if foundif(p != NULL)
Get positionint pos = p - str;
Get rest of stringchar *rest = p;
Get before characterCopy up to p - str characters
Find null terminatorstrchr(str, '\0')
Count occurrencesLoop with p = strchr(p+1, c)

Key Points

  1. Returns pointer, not index position
  2. NULL return means character not found
  3. Case-sensitive - 'A' and 'a' are different
  4. Can find null terminator '\0'
  5. First occurrence only - use strrchr() for last
  6. Modifies original string if you change the returned pointer's value
  7. Efficient - single pass through string
  8. Use if(ptr) to check non-NULL (equivalent to if(ptr != NULL))

Complete C Programming Guide + Compilers Collection


1. C srand() Function – Understanding Seed Initialization

https://macronepal.com/understanding-the-c-srand-function
Explains how srand() initializes the pseudo-random number generator in C by setting a seed value. Using the same seed produces the same sequence, while time(NULL) gives different results each run.


2. C rand() Function Mechanics and Limitations

https://macronepal.com/c-rand-function-mechanics-and-limitations
Explains how rand() generates pseudo-random numbers between 0 and RAND_MAX, its deterministic nature, and limitations for security use cases.


3. C log() Function

https://macronepal.com/c-log-function-2
Covers natural logarithm calculation using <math.h> and its applications.


4. Mastering Date and Time in C

https://macronepal.com/mastering-date-and-time-in-c
Explains <time.h> functions like time(), clock(), difftime(), and struct tm.


5. Mastering time_t Type in C

https://macronepal.com/mastering-the-c-time_t-type-for-time-management
Explains time representation as seconds since Unix epoch and conversion functions.


6. C exp() Function

https://macronepal.com/c-exp-function-mechanics-and-implementation
Explains exponential function exp(x) and its scientific applications.


7. C log() Function (Alternate Guide)

https://macronepal.com/c-log-function
Comparison of log() and log10() with usage examples.


8. C log10() Function

https://macronepal.com/mastering-the-log10-function-in-c
Explains base-10 logarithm for engineering and scientific applications.


9. C tan() Function

https://macronepal.com/understanding-the-c-tan-function
Explains tangent function and radian-based calculations.


10. Random Numbers in C (Secure vs Predictable)

https://macronepal.com/mastering-c-random-numbers-for-secure-and-predictable-applications
Explains difference between rand() and secure randomness methods.


11. Free Online C Compiler

https://macronepal.com/free-online-c-code-compiler-2
Browser-based compiler for testing C programs instantly.


C Functions, Arguments, Parameters & Flow

Mastering Functions in C – Complete Guide

https://macronepal.com/c/mastering-functions-in-c-a-complete-guide/
Covers function structure, modular programming, and real-world usage.


Function Arguments in C

https://macronepal.com/c-function-arguments/
Explains how arguments are passed and used in function calls.


Function Parameters in C

https://macronepal.com/c-function-parameters/
Explains defining inputs for functions and matching them with arguments.


Function Declarations in C

https://macronepal.com/c-function-declarations-syntax-rules-and-best-practices/
Covers prototypes, syntax rules, and best practices.


Function Calls in C

https://macronepal.com/understanding-function-calls-in-c-syntax-mechanics-and-best-practices/
Explains execution flow and parameter handling during function calls.


Void Functions in C

https://macronepal.com/understanding-void-functions-in-c-syntax-patterns-and-best-practices/
Explains functions that do not return values.


Return Values in C

https://macronepal.com/c-return-values-mechanics-types-and-best-practices/
Explains different return types and how functions return results.


Pass-by-Value in C

https://macronepal.com/aws/understanding-pass-by-value-in-c-mechanics-implications-and-best-practices/
Explains how copies of variables are passed into functions.


Pass-by-Reference in C

https://macronepal.com/c/understanding-pass-by-reference-in-c-pointers-semantics-and-safe-practices/
Explains using pointers to modify original variables.


C strstr() Function

https://macronepal.com/aws/c-strstr-function/
Explains substring search inside strings in C.


C Preprocessor & Macros

https://macronepal.com/mastering-c-variadic-macros-for-flexible-debugging/
https://macronepal.com/mastering-the-stdc-macro-in-c/
https://macronepal.com/c-time-macro-mechanics-and-usage/
https://macronepal.com/understanding-the-c-date-macro/
https://macronepal.com/c-file-type/
https://macronepal.com/mastering-c-line-macro-for-debugging-and-diagnostics/
https://macronepal.com/mastering-predefined-macros-in-c/
https://macronepal.com/c-error-directive-mechanics-and-usage/
https://macronepal.com/understanding-the-c-pragma-directive/
https://macronepal.com/c-include-directive/


C Structures, Memory, Scope & Linkage

https://macronepal.com/mastering-structures-in-c/
https://macronepal.com/c-structure-declaration-mechanics-and-usage/
https://macronepal.com/c-structure-initialization-mechanics-and-best-practices/
https://macronepal.com/mastering-c-structure-member-access-for-reliable-data-handling/
https://macronepal.com/c-nested-structures/
https://macronepal.com/mastering-arrays-of-structures-in-c/
https://macronepal.com/c-structure-pointers-mechanics-and-implementation/
https://macronepal.com/understanding-c-structure-parameter-passing-mechanics/
https://macronepal.com/mastering-c-returning-structures-for-efficient-data-flow/
https://macronepal.com/c-self-referential-structures/
https://macronepal.com/mastering-structure-alignment-in-c/
https://macronepal.com/c-structure-padding-mechanics-and-optimization/
https://macronepal.com/understanding-c-flexible-array-members-mechanics-and-usage/
https://macronepal.com/mastering-c-anonymous-structures-for-flattened-data-layouts/
https://macronepal.com/c-unions/
https://macronepal.com/mastering-c-name-mangling-and-symbol-decoration/
https://macronepal.com/c-no-linkage-mechanics-and-scope-isolation/
https://macronepal.com/understanding-c-internal-linkage-mechanics-and-architecture/


C Scope, Storage Classes & Typedef

https://macronepal.com/mastering-function-prototype-scope-in-c/
https://macronepal.com/c-function-scope-mechanics-and-visibility/
https://macronepal.com/understanding-c-file-scope-mechanics-and-architecture/
https://macronepal.com/mastering-c-scope-rules-for-predictable-name-resolution/
https://macronepal.com/c-scope-rules/
https://macronepal.com/mastering-c-register-storage-class-for-historical-context-and-modern-alternatives/
https://macronepal.com/mastering-_thread_local-in-c/
https://macronepal.com/c-extern-storage-class-mechanics-and-usage/
https://macronepal.com/understanding-the-c-static-storage-class-mechanics-and-usage/
https://macronepal.com/c-auto-storage-class/
https://macronepal.com/c-typedef-with-pointers/


Extra Articles

https://macronepal.com/13757-2/
https://macronepal.com/13748-2/
https://macronepal.com/13747-2/
https://macronepal.com/13746-2/
https://macronepal.com/13745-2/
https://macronepal.com/13708-2/
https://macronepal.com/13707-2/
https://macronepal.com/13702-2/


Online Compilers

https://macronepal.com/free-html-online-code-compiler/
https://macronepal.com/free-online-python-code-compiler/
https://macronepal.com/free-online-python2-code-compiler/
https://macronepal.com/free-online-java-code-compiler/
https://macronepal.com/free-online-javascript-code-compiler/
https://macronepal.com/free-online-node-js-code-compiler/
https://macronepal.com/free-online-c-code-compiler/
https://macronepal.com/free-online-c-code-compiler-2/
https://macronepal.com/free-online-c-code-compiler-3/
https://macronepal.com/free-online-php-code-compiler/
https://macronepal.com/free-online-ruby-code-compiler/
https://macronepal.com/free-online-perl-code-compiler/
https://macronepal.com/free-online-lua-code-compiler/
https://macronepal.com/free-online-tcl-code-compiler/
https://macronepal.com/free-online-groovy-code-compiler/
https://macronepal.com/free-online-j-shell-code-compiler/
https://macronepal.com/free-online-haskell-code-compiler/
https://macronepal.com/free-online-scala-code-compiler/
https://macronepal.com/free-online-common-lisp-code-compiler/
https://macronepal.com/free-online-d-code-compiler/
https://macronepal.com/free-online-ada-code-compiler/
https://macronepal.com/free-erlang-code-compiler/
https://macronepal.com/free-online-assembly-code-compiler/

Complete Guide to Core & Advanced C Programming Concepts (Functions, Strings, Arrays, Loops, I/O, Control Flow)

https://macronepal.com/bash/building-blocks-of-c-a-complete-guide-to-functions/
Explains how functions in C work as reusable blocks of code, including declaration, definition, parameters, return values, and modular programming structure.

https://macronepal.com/bash/the-heart-of-text-processing-a-complete-guide-to-strings-in-c-2/
Explains how strings are handled in C using character arrays, string manipulation techniques, and common library functions for text processing.

https://macronepal.com/bash/the-cornerstone-of-data-organization-a-complete-guide-to-arrays-in-c/
Explains arrays in C as structured memory storage for multiple values, including indexing, initialization, and efficient data organization.

https://macronepal.com/bash/guaranteed-execution-a-complete-guide-to-the-do-while-loop-in-c/
Explains the do-while loop in C, where the loop body executes at least once before checking the condition.

https://macronepal.com/bash/mastering-iteration-a-complete-guide-to-the-for-loop-in-c/
Explains the for loop in C, including initialization, condition checking, and increment/decrement for controlled iteration.

https://macronepal.com/bash/mastering-iteration-a-complete-guide-to-while-loops-in-c/
Explains the while loop in C, focusing on condition-based repetition and proper loop control mechanisms.

https://macronepal.com/bash/beyond-if-else-a-complete-guide-to-switch-case-in-c/
Explains switch-case statements in C, enabling multi-branch decision-making based on variable values.

https://macronepal.com/bash/mastering-conditional-logic-a-complete-guide-to-if-else-statements-in-c/
Explains if-else statements in C for decision-making and controlling program flow based on conditions.

https://macronepal.com/bash/mastering-the-fundamentals-a-complete-guide-to-arithmetic-operations-in-c/
Explains arithmetic operations in C such as addition, subtraction, multiplication, division, and operator precedence.

https://macronepal.com/bash/foundation-of-c-programming-a-complete-guide-to-basic-input-output/
Explains basic input and output in C using scanf and printf for interacting with users and displaying results.

Online C Code Compiler
https://macronepal.com/free-online-c-code-compiler-2/

Leave a Reply

Your email address will not be published. Required fields are marked *


Macro Nepal Helper