Monday, August 27, 2012

Strings in C

Manipulation of strings in C


A string in C is an array of char values terminated by a special null character value '\0'. For example, here is a statically declared string that is initialized to "hi":

 char str[3]; 
 // need space for chars in str, plus for terminating '\0' char
 str[0] = 'h';
 str[1] = 'i';
 str[2] = '\0';
 printf("%s\n", str);   
// prints hi to stdout 

C library functions for strings (string.h)

C provides a library for strings. C string library functions do not allocate space for the strings they manipulate, nor do they check that you pass in valid strings; it is up to your program to allocate space for the strings that the C string library will use. Calling string library functions with bad address values will cause a segfault or "strange" memory access errors.Here is a description of some of the functions in the Stardard C string libarary (string.h) for manipulating strings:

#include <string.h>

-----------

int strlen(char *s); 
  /* returns the length of the string 
  not including the null character */

-----------

char *strcpy(char *dst, char *src);
/* copies string src to string dst up 
 unitl first '\0' character in src
 returns a ptr to the destination string
 it adds '\0' to end of the copy */

-----------

char *strncpy(char *dst, char *src, int size);  

/* copies up to first '\0' or size characters 
 from src to dst */

-----------

int strcmp(char *s1, char *s2); 
/* returns 0 if s1 and s2 are the same strings
 a value < 0 if s1 is less than s2 
 a value > 0 if s1 is greater than s2 */

-----------


char *strcat(char *dst, char *src)  

/* append chars from src to end of dst 
returns ptr to dst, it adds '\0' to end */


-----------

char *strncat(char *dst, char *src, int size);

------------

char *strstr(char *string, char *substr);  

/* locates a substering inside a string
returns a pointer to the begining of substr in string
returns NULL if substr not in string */

--------------

char *strchr(const char *s, int c);        
//locate a character in a string


--------------

char *strtok(char *s, const char *delim); 
// extract tokens from strings


--------------



In addition there are some functions in stdlib.h for converting between strings and other C types:
#include <stdlib.h>

int atoi(const char *nptr);  
// convert a string to an integer  
// "1234" to int value 1234
double atof(const char *nptr);

-------------

To get on-line documentation of C functions, use Unix's man utility:
        % man strcpy
Here is more information about using man.

Using strings in C programs

One thing to keep in mind when allocating space for strings is that you need to allocate one more space than the number of characters in the string so that you can store the terminating '\0' character.Here are some examples of using these functions:
int main() {
 int size;
 char *static_str = "hello there";   
 char *new_str = NULL;
 char *ptr = NULL;

 printf("%s\n", static_str);  // prints "hello there"
 size = strlen(static_str);
 new_str = malloc(sizeof(char)*(size+1)); // need space for '\0'
 if(new_str == NULL) { 
  Error("malloc failed\n"); 
 }
 strncpy(new_str, static_str, 6);
 strcat(new_str, "yo");
 printf("%s\n", new_str); // prints "hello yo"
 if((ptr = strstr(new_str, "yo")) != NULL) {
  printf("%s\n", ptr); // prints "yo"
 }
 free(new_str);
}

No comments:

Post a Comment