C Library - <string.h> - GeeksforGeeks (2024)

Skip to content

C Library - <string.h> - GeeksforGeeks (1)

Last Updated : 15 Mar, 2023

Summarize

Comments

Improve

Suggest changes

Like Article

Like

Save

Report

string.h is a standard header file in the C language that contains functions for manipulating strings (arrays of characters). <string.h> header file contains some useful string functions that can be directly used in a program by invoking the #include preprocessor directive.

Syntax:

#include <string.h>

Example:

C

// C program to demonstrate the use of C string.h

//header file

#include <stdio.h>

#include <string.h>

int main()

{

// initializing some strings

char str1[20] = "Geeksfor";

char str2[20] = "Geeks";

// using strlen(), strcat()

printf("Str1: %s\n", str1);

printf("Length of Str1 before concatenation: %d\n",

strlen(str1));

strcat(str1, str2); // concatenating str1 and str2

printf("Str1: %s\n", str1);

return 0;

}

Output

Str1: GeeksforLength of Str1 before concatenation: 8Str1: GeeksforGeeks

C string.h Library Functions

<string.h> header file contains the following functions:

Function Name

Function Description

strlen()

Returns the length of the string.

strcpy()

Copy one string to another.

strncpy()

Copy first n characters of one string to another.

strcat()

Concatenates two strings.

strncat()

Concatenates first n characters of one string to another.

strcmp()

Compares two strings.

strncmp()

Compares first n characters of two strings.

strchr()

Find the first occurrence of the given character in the string.

strrchr()

Finds the last occurrence of the given characters in the string.

strstr()

Find the given substring in the string.

strcspn()

Returns the span of the source string not containing any character of the given string.

strspn()

Returns the span of the source string containing only the characters of the given string.

strpbrk()

Finds the first occurrence of any of the characters of the given string in the source string.

strtok()

Split the given string into tokens based on some character as a delimiter.

strcoll()

Compares two strings that are passed.

memset()

Initialize a block of memory with the given character.

memcmp()

Compares two blocks of memory.

memcpy()

Copy two blocks of memory.

memmove()

Moves two blocks of memory.

memchr()

Finds the given character in the block of memory.

Example:

C

// C program to demonstrate the use of different functions

// of string.h library

#include <stdio.h>

#include <string.h>

// defining the common size of the string arrays

#define size 50

int main()

{

char destString[size] = "Geeksfor";

char sourceString[size] = "Geeks";

char tempDestString[size];

printf("Length of Destination String: %d\n",

strlen(destString));

// copying sourceString to tempDestString using strcpy()

strcpy(tempDestString, sourceString);

printf("tempDestString after strcpy(): %s\n",

tempDestString);

// concatenating source to destination using strcat()

strcat(destString, sourceString);

printf("destString after Concatenation: %s\n",

destString);

// comparison using strcmp()

printf("Comparing destString with sourceString: %d\n",

strcmp(destString, sourceString));

printf("Comparing first 5 characters: %d\n",

strncmp(destString, sourceString, 5));

// searching substring using strstr()

printf("Searching sourceString in destString: %s\n",

strstr(destString, sourceString));

return 0;

}

Output

Length of Destination String: 8tempDestString after strcpy(): GeeksdestString after Concatenation: GeeksforGeeksComparing destString with sourceString: 102Comparing first 5 characters: 0Searching sourceString in destString: GeeksforGeeks


Please Login to comment...

Similar Reads

C Library Function - difftime()

The difftime() is a C Library function that returns the difference in time, in seconds(i.e. ending time - starting time). It takes two parameters of type time_t and computes the time difference in seconds. The difftime() function is defined inside the &lt;time.h&gt; header file. Syntax The syntax of difftime() function is as follows: double difftim

1 min read

wcstof function in C library

The wcstof() functions convert the initial portion of the wide-character string pointed to by str to a float point value. The str parameter points to a sequence of characters that can be interpreted as a numeric floating-point value. These functions stop reading the string at the first character that it cannot recognize as part of a number i.e. if

2 min read

wprintf() and wscanf in C Library

If you are dealing with the wide characters then printf() and scanf() function cannot be used. There are different functions for input and output C wide string. wprintf() : The wprintf() function writes the wide string pointed to by format to stdout. The wide string format may contain format specifiers starting with % which are replaced by the valu

3 min read

Difference between Header file and Library

Header Files: The files that tell the compiler how to call some functionality (without knowing how the functionality actually works) are called header files. They contain the function prototypes. They also contain Data types and constants used with the libraries. We use #include to use these header files in programs. These files end with .h extensi

3 min read

ctype.h(&lt;cctype&gt;) library in C/C++ with Examples

As string.h header file contains inbuilt functions to handle Strings in C/C++, the ctype.h/&lt;cctype&gt; contains inbuilt functions to handle characters in C/C++ respectively. Characters are of two types: Printable Characters: The characters that are displayed on the terminal. Control Characters: The characters that are initiated to perform a spec

5 min read

Check if two strings are same or not without using library functions

Given two strings S1 and S2, the task is to check whether they are the same or not without using string library functions. Examples: Input: S1 = ”GeeksForGeeks”, S2 = ”GeeksForGeeks”Output: TrueExplanation:S1 and S2 are the same strings Input: S1 = ”GeeksForGeeks”, S2 = ”GeeksforGeeks”Output: False Approach: Follow the steps below to solve the prob

5 min read

free() Function in C Library With Examples

The free() function in C is used to free or deallocate the dynamically allocated memory and helps in reducing memory wastage. The C free() function cannot be used to free the statically allocated memory (e.g., local variables) or memory allocated on the stack. It can only be used to deallocate the heap memory previously allocated using malloc(), ca

3 min read

C Library Function - putc()

In C, the putc() function is used to write a character passed as an argument to a given stream. It is a standard library function defined in the &lt;stdio.h&gt; header file. The function first converts the character to unsigned char, then writes it to the given stream at the position indicated by the file pointer, and finally increments the file po

4 min read

C Library - exp() Function

In C programming language, the exp() function is a built-in function of &lt;math.h&gt; library which is used to calculate the value of e (Euler's Number = 2.71828) raised to the power x where x is any real number. Syntax: double exp(double x);Arguments: This function takes only one argument of type double.Return Type: This function returns the valu

4 min read

C Library - math.h

The &lt;math.h&gt; header file in C contains the standard math library functions which can be utilized for various mathematical operations. All math.h library functions accept double type as an argument and return double as a result. It also contains some commonly used constants defined as macros. Syntax: #include &lt;math.h&gt;After including the

4 min read

How to print range of basic data types without any library function and constant in C?

How to write C code to print range of basic data types like int, char, short int, unsigned int, unsigned char etc? It is assumed that signed numbers are stored in 2's complement form. We strongly recommend to minimize the browser and try this yourself first. Following are the steps to be followed for unsigned data types. 1) Find number of bytes for

4 min read

How to add "graphics.h" C/C++ library to gcc compiler in Linux

While trying c graphic programming on Ubuntu, I figured out that graphic.h is not a standard C library and it is not supported by gcc compiler. So I am writing this article to explain the process.If you want to use graphics.h on Ubuntu platform you need to compile and install libgraph. It is the implementation of turbo c graphics API on Linux using

2 min read

isgraph() C library function

The C library function isgraph() checks whether a character is a graphic character or not. Characters that have graphical representation are known are graphic characters. For example: ':' ';' '?' '@' etc. Syntax - #include &lt;ctype.h> int isgraph(int ch); Return Value - function returns nonzero if ch is any printable character other than a space,

2 min read

How Do I Create a Library in C?

Libraries are a collection of code that can be used by other programs. They promote code reuse and modularity. In C, we can create our own libraries. In this article, we will learn how to create a library in C. Creating a Library in CIn C, there are multiple methods using which we can create a library.: Static LibraryDynamic LibraryIn this article,

3 min read

How to Create a Static Library in C?

In C, we can create our own libraries that contains the code for the functions or macros that we may need very often. These libraries can be then used in our programs. In this article, we will learn how to create a custom static library and use it with GCC compiler. What is a Static Libraries in C?A static library is a collection of object files th

2 min read

Print all possible combinations of the string by replacing '$' with any other digit from the string

Given a number as a string where some of the digits are replaced by a '$', the task is to generate all possible number by replacing the '$' with any of the digits from the given string.Examples: Input: str = "23$$" Output: 2322 2323 2332 2333Input: str = "$45" Output: 445 545 Approach: Find all the combinations of the string by replacing the charac

15+ min read

Lexicographically smallest string which is not a subsequence of given string

Given a string S, the task is to find the string which is lexicographically smallest and not a subsequence of the given string S. Examples: Input: S = "abcdefghijklmnopqrstuvwxyz"Output: aaExplanation:String "aa" is the lexicographically smallest string which is not present in the given string as a subsequence. Input: S = "aaaa"Output: aaabExplanat

5 min read

How to find length of a string without string.h and loop in C?

Find the length of a string without using any loops and string.h in C. Your program is supposed to behave in following way: Enter a string: GeeksforGeeks (Say user enters GeeksforGeeks) Entered string is: GeeksforGeeks Length is: 13 You may assume that the length of entered string is always less than 100.The following is the solution. C/C++ Code #i

2 min read

Print substring of a given string without using any string function and loop in C

Write a function mysubstr() in C that doesn't use any string function, doesn't use any loop, and prints substring of a string. The function should not modify contents of string and should not use a temporary char array or string. For example mysubstr("geeksforgeeks", 1, 3) should print "eek" i.e., the substring between indexes 1 and 3. One solution

2 min read

What is the best way in C to convert a number to a string?

Solution: Use sprintf() function. #include&lt;stdio.h&gt; int main() { char result[50]; float num = 23.34; sprintf(result, &quot;%f&quot;, num); printf(&quot;\n The string for the num is %s&quot;, result); getchar(); } You can also write your own function using ASCII values of numbers.

1 min read

C | String | Question 2

What is the output of following program? # include &lt;stdio.h&gt; int main() { char str1[] = &quot;GeeksQuiz&quot;; char str2[] = {'G', 'e', 'e', 'k', 's', 'Q', 'u', 'i', 'z'}; int n1 = sizeof(str1)/sizeof(str1[0]); int n2 = sizeof(str2)/sizeof(str2[0]); printf(&quot;n1 = %d, n2 = %d&quot;, n1, n2); return 0; } (A) n1 = 10, n2 = 9 (B) n1 = 10, n2

1 min read

C | String | Question 3

What is the output of following program? #include&lt;stdio.h&gt; void swap(char *str1, char *str2) { char *temp = str1; str1 = str2; str2 = temp; } int main() { char *str1 = &quot;Geeks&quot;; char *str2 = &quot;Quiz&quot;; swap(str1, str2); printf(&quot;str1 is %s, str2 is %s&quot;, str1, str2); return 0; } (A) str1 is Quiz, str2 is Geeks (B) str1

1 min read

C | String | Question 4

Predict the output? #include &lt;stdio.h&gt; int fun(char *str1) { char *str2 = str1; while(*++str1); return (str1-str2); } int main() { char *str = &quot;GeeksQuiz&quot;; printf(&quot;%d&quot;, fun(str)); return 0; } (A) 10 (B) 9 (C) 8 (D) Random Number Answer: (B) Explanation: The function fun() basically counts number of characters in input stri

1 min read

C | String | Question 5

What does the following fragment of C-program print? char c[] = &quot;GATE2011&quot;; char *p =c; printf(&quot;%s&quot;, p + p[3] - p[1]) ; (A) GATE2011 (B) E2011 (C) 2011 (D) 011 Answer: (C) Explanation: See comments for explanation. char c[] = "GATE2011"; // p now has the base address string "GATE2011" char *p = c; // p[3] is 'E' and p[1] is 'A'.

1 min read

C | String | Question 6

C/C++ Code #include int main() { char str[] = \"GeeksQuiz\"; printf(\"%s %s %s \", &str[5], &5[str], str+5); printf(\"%c %c %c \", *(str+6), str[6], 6[str]); return 0; } (A) Runtime Error (B) Compiler Error (C) uiz uiz uiz u u u (D) Quiz Quiz Quiz u u u Answer: (D)Explanation: The program has no error. All of the following expressions mean same thi

1 min read

C | String | Question 7

In below program, what would you put in place of “?” to print “Quiz”? C/C++ Code #include int main() { char arr[] = \"GeeksQuiz\"; printf(\"%s\", ?); return 0; } (A)arr (B)(arr+5) (C)(arr+4) (D)Not possible Answer: (B)Explanation: Since %s is used, the printf statement will print everything starting from arr+5 until it finds ‘\\0’ Quiz of this Ques

1 min read

C | String | Question 8

Output? int main() { char a[2][3][3] = {'g','e','e','k','s','q','u','i','z'}; printf(&quot;%s &quot;, **a); return 0; } (A) Compiler Error (B) geeksquiz followed by garbage characters (C) geeksquiz (D) Runtime Error Answer: (C) Explanation: We have created a 3D array that should have 2*3*3 (= 18) elements, but we are initializing only 9 of them. In

1 min read

C | String | Question 9

Consider the following C program segment: char p[20]; char *s = &quot;string&quot;; int length = strlen(s); int i; for (i = 0; i &lt; length; i++) p[i] = s[length — i]; printf(&quot;%s&quot;, p); The output of the program is? (GATE CS 2004) (A) gnirts (B) gnirt (C) string (D) no output is printed Answer: (D) Explanation: Let us consider below line

1 min read

C | String | Question 11

Predict the output of the following program: #include &lt;stdio.h&gt; int main() { char str[] = &quot;%d %c&quot;, arr[] = &quot;GeeksQuiz&quot;; printf(str, 0[arr], 2[arr + 3]); return 0; } (A) G Q (B) 71 81 (C) 71 Q (D) Compile-time error Answer: (C) Explanation: The statement printf(str, 0[arr], 2[arr + 3]); boils down to: printf("%d %c, 0["Geek

1 min read

C | String | Question 12

Output of following program #include &lt;stdio.h&gt; int fun(char *p) { if (p == NULL || *p == '&#092;&#048;') return 0; int current = 1, i = 1; while (*(p+current)) { if (p[current] != p[current-1]) { p[i] = p[current]; i++; } current++; } *(p+i)='&#092;&#048;'; return i; } int main() { char str[] = &quot;geeksskeeg&quot;; fun(str); puts(str); ret

1 min read

Article Tags :

We use cookies to ensure you have the best browsing experience on our website. By using our site, you acknowledge that you have read and understood our Cookie Policy & Privacy Policy

C Library - <string.h> - GeeksforGeeks (4)

'); $('.spinner-loading-overlay').show(); jQuery.ajax({ url: writeApiUrl + 'create-improvement-post/?v=1', type: "POST", contentType: 'application/json; charset=utf-8', dataType: 'json', xhrFields: { withCredentials: true }, data: JSON.stringify({ gfg_id: post_id, check: true }), success:function(result) { jQuery.ajax({ url: writeApiUrl + 'suggestions/auth/' + `${post_id}/`, type: "GET", dataType: 'json', xhrFields: { withCredentials: true }, success: function (result) { $('.spinner-loading-overlay:eq(0)').remove(); var commentArray = result; if(commentArray === null || commentArray.length === 0) { // when no reason is availaible then user will redirected directly make the improvment. // call to api create-improvement-post $('body').append('

'); $('.spinner-loading-overlay').show(); jQuery.ajax({ url: writeApiUrl + 'create-improvement-post/?v=1', type: "POST", contentType: 'application/json; charset=utf-8', dataType: 'json', xhrFields: { withCredentials: true }, data: JSON.stringify({ gfg_id: post_id, }), success:function(result) { $('.spinner-loading-overlay:eq(0)').remove(); $('.improve-modal--overlay').hide(); $('.unlocked-status--improve-modal-content').css("display","none"); $('.create-improvement-redirection-to-write').attr('href',writeUrl + 'improve-post/' + `${result.id}` + '/', '_blank'); $('.create-improvement-redirection-to-write')[0].click(); }, error:function(e) { $('.spinner-loading-overlay:eq(0)').remove(); var result = e.responseJSON; if(result.detail.non_field_errors.length){ $('.improve-modal--improve-content .improve-modal--improve-content-modified').text(`${result.detail.non_field_errors}.`); jQuery('.improve-modal--overlay').show(); jQuery('.improve-modal--improvement').show(); $('.locked-status--impove-modal').css("display","block"); $('.unlocked-status--improve-modal-content').css("display","none"); $('.improve-modal--improvement').attr("status","locked"); $('.improvement-reason-modal').hide(); } }, }); return; } var improvement_reason_html = ""; for(var comment of commentArray) { // loop creating improvement reason list markup var comment_id = comment['id']; var comment_text = comment['suggestion']; improvement_reason_html += `

${comment_text}

`; } $('.improvement-reasons_wrapper').html(improvement_reason_html); $('.improvement-bottom-btn').html("Create Improvement"); $('.improve-modal--improvement').hide(); $('.improvement-reason-modal').show(); }, error: function(e){ $('.spinner-loading-overlay:eq(0)').remove(); // stop loader when ajax failed; }, }); }, error:function(e) { $('.spinner-loading-overlay:eq(0)').remove(); var result = e.responseJSON; if(result.detail.non_field_errors.length){ $('.improve-modal--improve-content .improve-modal--improve-content-modified').text(`${result.detail.non_field_errors}.`); jQuery('.improve-modal--overlay').show(); jQuery('.improve-modal--improvement').show(); $('.locked-status--impove-modal').css("display","block"); $('.unlocked-status--improve-modal-content').css("display","none"); $('.improve-modal--improvement').attr("status","locked"); $('.improvement-reason-modal').hide(); } }, }); } else { if(loginData && !loginData.isLoggedIn) { $('.improve-modal--overlay').hide(); if ($('.header-main__wrapper').find('.header-main__signup.login-modal-btn').length) { $('.header-main__wrapper').find('.header-main__signup.login-modal-btn').click(); } return; } } }); $('.left-arrow-icon_wrapper').on('click',function(){ if($('.improve-modal--suggestion').is(":visible")) $('.improve-modal--suggestion').hide(); else{ $('.improvement-reason-modal').hide(); } $('.improve-modal--improvement').show(); }); function loadScript(src, callback) { var script = document.createElement('script'); script.src = src; script.onload = callback; document.head.appendChild(script); } function suggestionCall() { var suggest_val = $.trim($("#suggestion-section-textarea").val()); var array_String= suggest_val.split(" ") var gCaptchaToken = $("#g-recaptcha-response-suggestion-form").val(); var error_msg = false; if(suggest_val != "" && array_String.length >=4){ if(suggest_val.length <= 2000){ var payload = { "gfg_post_id" : `${post_id}`, "suggestion" : `

${suggest_val}

`, } if(!loginData || !loginData.isLoggedIn) // User is not logged in payload["g-recaptcha-token"] = gCaptchaToken jQuery.ajax({ type:'post', url: "https://apiwrite.geeksforgeeks.org/suggestions/auth/create/", xhrFields: { withCredentials: true }, crossDomain: true, contentType:'application/json', data: JSON.stringify(payload), success:function(data) { jQuery('.spinner-loading-overlay:eq(0)').remove(); jQuery('#suggestion-section-textarea').val(""); jQuery('.suggest-bottom-btn').css("display","none"); // Update the modal content const modalSection = document.querySelector('.suggestion-modal-section'); modalSection.innerHTML = `

Thank You!

Your suggestions are valuable to us.

You can now also contribute to the GeeksforGeeks community by creating improvement and help your fellow geeks.

`; }, error:function(data) { jQuery('.spinner-loading-overlay:eq(0)').remove(); jQuery('#suggestion-modal-alert').html("Something went wrong."); jQuery('#suggestion-modal-alert').show(); error_msg = true; } }); } else{ jQuery('.spinner-loading-overlay:eq(0)').remove(); jQuery('#suggestion-modal-alert').html("Minimum 5 Words and Maximum Character limit is 2000."); jQuery('#suggestion-modal-alert').show(); jQuery('#suggestion-section-textarea').focus(); error_msg = true; } } else{ jQuery('.spinner-loading-overlay:eq(0)').remove(); jQuery('#suggestion-modal-alert').html("Enter atleast four words !"); jQuery('#suggestion-modal-alert').show(); jQuery('#suggestion-section-textarea').focus(); error_msg = true; } if(error_msg){ setTimeout(() => { jQuery('#suggestion-section-textarea').focus(); jQuery('#suggestion-modal-alert').hide(); }, 3000); } } document.querySelector('.suggest-bottom-btn').addEventListener('click', function(){ jQuery('body').append('

'); jQuery('.spinner-loading-overlay').show(); if(loginData && loginData.isLoggedIn) { suggestionCall(); return; } // load the captcha script and set the token loadScript('https://www.google.com/recaptcha/api.js?render=6LdMFNUZAAAAAIuRtzg0piOT-qXCbDF-iQiUi9KY',[], function() { setGoogleRecaptcha(); }); }); $('.improvement-bottom-btn.create-improvement-btn').click(function() { //create improvement button is clicked $('body').append('

'); $('.spinner-loading-overlay').show(); // send this option via create-improvement-post api jQuery.ajax({ url: writeApiUrl + 'create-improvement-post/?v=1', type: "POST", contentType: 'application/json; charset=utf-8', dataType: 'json', xhrFields: { withCredentials: true }, data: JSON.stringify({ gfg_id: post_id }), success:function(result) { $('.spinner-loading-overlay:eq(0)').remove(); $('.improve-modal--overlay').hide(); $('.improvement-reason-modal').hide(); $('.create-improvement-redirection-to-write').attr('href',writeUrl + 'improve-post/' + `${result.id}` + '/', '_blank'); $('.create-improvement-redirection-to-write')[0].click(); }, error:function(e) { $('.spinner-loading-overlay:eq(0)').remove(); var result = e.responseJSON; if(result.detail.non_field_errors.length){ $('.improve-modal--improve-content .improve-modal--improve-content-modified').text(`${result.detail.non_field_errors}.`); jQuery('.improve-modal--overlay').show(); jQuery('.improve-modal--improvement').show(); $('.locked-status--impove-modal').css("display","block"); $('.unlocked-status--improve-modal-content').css("display","none"); $('.improve-modal--improvement').attr("status","locked"); $('.improvement-reason-modal').hide(); } }, }); });

C Library - <string.h> - GeeksforGeeks (2024)
Top Articles
Big changes to the American Express Gold Card: New benefits and a higher annual fee
Are Budgeting Apps Worth It?
Hometown Pizza Sheridan Menu
Stretchmark Camouflage Highland Park
Part time Jobs in El Paso; Texas that pay $15, $25, $30, $40, $50, $60 an hour online
Workday Latech Edu
Google Jobs Denver
Obituaries
7.2: Introduction to the Endocrine System
THE 10 BEST River Retreats for 2024/2025
Truist Drive Through Hours
Weather In Moon Township 10 Days
Spelunking The Den Wow
Www.paystubportal.com/7-11 Login
What Happened To Maxwell Laughlin
Bend Pets Craigslist
Dark Chocolate Cherry Vegan Cinnamon Rolls
Tygodnik Polityka - Polityka.pl
Program Logistics and Property Manager - Baghdad, Iraq
Asteroid City Showtimes Near Violet Crown Charlottesville
Deshuesadero El Pulpo
Il Speedtest Rcn Net
Move Relearner Infinite Fusion
Pawn Shop Moline Il
Marokko houdt honderden mensen tegen die illegaal grens met Spaanse stad Ceuta wilden oversteken
Spectrum Outage in Queens, New York
Jurassic World Exhibition Discount Code
2004 Honda Odyssey Firing Order
Sam's Club Near Wisconsin Dells
Laveen Modern Dentistry And Orthodontics Laveen Village Az
Loopnet Properties For Sale
Eero Optimize For Conferencing And Gaming
The Wichita Beacon from Wichita, Kansas
Haley Gifts :: Stardew Valley
Goodwill Houston Select Stores Photos
Uhaul Park Merced
Ljw Obits
Metra Schedule Ravinia To Chicago
Best Restaurants In Blacksburg
Who Is Responsible for Writing Obituaries After Death? | Pottstown Funeral Home & Crematory
Acts 16 Nkjv
Actor and beloved baritone James Earl Jones dies at 93
Kutty Movie Net
Pulitzer And Tony Winning Play About A Mathematical Genius Crossword
Mychart Mercy Health Paducah
Arnesons Webcam
Citizens Bank Park - Clio
M&T Bank
Ty Glass Sentenced
Pulpo Yonke Houston Tx
How to Choose Where to Study Abroad
Latest Posts
Article information

Author: Edmund Hettinger DC

Last Updated:

Views: 5999

Rating: 4.8 / 5 (78 voted)

Reviews: 85% of readers found this page helpful

Author information

Name: Edmund Hettinger DC

Birthday: 1994-08-17

Address: 2033 Gerhold Pine, Port Jocelyn, VA 12101-5654

Phone: +8524399971620

Job: Central Manufacturing Supervisor

Hobby: Jogging, Metalworking, Tai chi, Shopping, Puzzles, Rock climbing, Crocheting

Introduction: My name is Edmund Hettinger DC, I am a adventurous, colorful, gifted, determined, precious, open, colorful person who loves writing and wants to share my knowledge and understanding with you.