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);
| Parameter | Description |
|---|---|
str | String to search in |
c | Character to find (passed as int, treated as char) |
Return Value
| Return Value | Meaning |
|---|---|
| Pointer | Points to first occurrence of character |
| NULL | Character 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
| Function | Purpose | Finds |
|---|---|---|
strchr() | First occurrence | Character |
strrchr() | Last occurrence | Character |
strstr() | First occurrence | Substring |
strpbrk() | First of any characters | Set 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
| Mistake | Wrong Code | Correct Code |
|---|---|---|
| Forgetting header | No include | #include <string.h> |
| Wrong return type | char c = strchr(str, 'a'); | char *ptr = strchr(str, 'a'); |
| Modifying string literal | strchr("Hi", 'H')[0] = 'h'; | Use array: char str[]="Hi"; |
| Not checking NULL | *strchr(str,'z') | Check if(ptr != NULL) |
Quick Reference
| Task | Code |
|---|---|
| Find first 'x' | char *p = strchr(str, 'x'); |
| Check if found | if(p != NULL) |
| Get position | int pos = p - str; |
| Get rest of string | char *rest = p; |
| Get before character | Copy up to p - str characters |
| Find null terminator | strchr(str, '\0') |
| Count occurrences | Loop with p = strchr(p+1, c) |
Key Points
- Returns pointer, not index position
- NULL return means character not found
- Case-sensitive - 'A' and 'a' are different
- Can find null terminator
'\0' - First occurrence only - use
strrchr()for last - Modifies original string if you change the returned pointer's value
- Efficient - single pass through string
- 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/
