Header Files
#include <string.h>
Creating Strings
static const char *my_define = "/etc/sysconfig/network";
const char *mytext = "Hello World";
String Length
int mytext_length = strlen(mytext);
Does String Contain
if (strncmp(*++argv, "O_RDONLY", 8) == 0)
open_mode |= O_RDONLY;
Copy String
The preferred way
strncpy (string_destination, string_source, max_length); //Note no null will be included if the string is >= max_length
The more dangerous way
strcpy (string_destination, string_source);
Return A Char Array From A Function
You need to dynamically allocate your char array.
For C++:
char *recvmsg(){
char* buffer = new char[1024];
return buffer;
}
For C:
char *recvmsg(){
char* buffer = malloc(1024);
return buffer;
}
Without this dynamic allocation the variable will reside on the function's stack and will therefore be destroyed on exit. This is why you will typically get a warning if you do this. Allocating it on the heap prevents this, BUT you will have to be careful and free the memory once done with it via delete[].
Replace String With String
//************************************************
//************************************************
//********** REPLACE STRING WITH STRING **********
//************************************************
//************************************************
//Look for first occurrence of a string and replace it with a new string
//The new outputted string is stored in original_string
int string_replace_string_with_string (char *original_string, char *find_string, char *replace_with_string)
{
char buffer[MAX_STRING_LENGTH];
char *p;
p = strstr(original_string, find_string); //Find first occurrence of the string
if (p)
{
strncpy(buffer, original_string, p - original_string); //Copy characters from original_string start to find_string st$
buffer[p - original_string] = '';
snprintf(buffer + (p - original_string),
(MAX_STRING_LENGTH - (int)(buffer + (p - original_string))),
"%s%s",
replace_with_string,
p + strlen(find_string));
strncpy(original_string, buffer, MAX_STRING_LENGTH); //Copy back into the original string
return(1);
}
return(0);
}
/* Using the function:
#define MAX_STRING_LENGTH 1024
char original_string[MAX_STRING_LENGTH] = {"There are many variations of passages of Lorem Ipsum available, but are the majority have suffered alteration in some form"};
char find_string[] = {"are"};
char replace_with_string[] = {"z"};
string_replace_string_with_string (original_string, find_string, replace_with_string, MAX_STRING_LENGTH);
printf("nnMODIFIED STRING:n%sn", original_string);
*/
Find String Between Strings
//*************************************************
//*************************************************
//********** FIND STRING BETWEEN STRINGS **********
//*************************************************
//*************************************************
//Looks for first occurrence of a string1 and string2 and outputs the string between them
int string_find_string_between_strings (char *source_string, char *find_string1, char *find_string2, char *result_string)
{
char *p_1;
char *p_2;
//Default to a null output string
*result_string = '';
p_1 = strstr(source_string, find_string1);
p_2 = strstr(source_string, find_string2);
if (p_1 && p_2)
{
//Exclude the search strings from the result
p_1 += strlen(find_string1);
//Ensure they are the right way round
if (p_2 < p_1)
return(0);
int length = (p_2 - p_1);
if (length > (MAX_STRING_LENGTH - 1))
length = (MAX_STRING_LENGTH - 1);
//Ensure the final byte is null
result_string[length] = '';
strncpy(result_string, p_1, length); //Copy characters from original_string start to find_string st$
return(1);
}
return(0);
}
/* Using the function:
#define MAX_STRING_LENGTH 1024
char original_string[] = {"There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form"};
char find_string1[] = {"are "};
char find_string2[] = {" but"};
char result_string[MAX_STRING_LENGTH];
string_find_string_between_strings(original_string, find_string1, find_string2, result_string, MAX_STRING_LENGTH);
printf("nFOUND STRING:n[%s]n", result_string);
*/
Get String Up To String
//*********************************************
//*********************************************
//********** GET STRING UP TO STRING **********
//*********************************************
//*********************************************
//Looks for first occurrence of a string and outputs the string up to that string
int string_get_string_up_to_string (char *source_string, char *find_string, char *result_string)
{
char *p;
//Default to a null output string
*result_string = '';
p = strstr(source_string, find_string);
if (p)
{
int length = (p - source_string);
if (length > (MAX_STRING_LENGTH - 1))
length = (MAX_STRING_LENGTH - 1);
//Ensure the final byte is null (won't be added by strncpy if resutlt > MAX_STRING_LENGTH)
result_string[length] = '';
strncpy(result_string, source_string, length); //Copy characters from original_string start to find_string st$
return(1);
}
return(0);
}
/* Using the function:
#define MAX_STRING_LENGTH 1024
char source_string[] = {"There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form"};
char find_string[] = {" but "};
char result_string[MAX_STRING_LENGTH];
string_get_string_up_to_string (source_string, find_string, result_string);
printf("nBefore string:n[%s]n", result_string);
*/
Get String After String
//*********************************************
//*********************************************
//********** GET STRING AFTER STRING **********
//*********************************************
//*********************************************
//Looks for first occurrence of a string and outputs the string after that string
int string_get_string_after_string (char *source_string, char *find_string, char *result_string)
{
char *p;
//Default to a null output string
*result_string = '';
p = strstr(source_string, find_string);
if (p)
{
p += strlen(find_string);
//Ensure the final byte is null (won't be added by strncpy if resutlt > MAX_STRING_LENGTH)
result_string[(MAX_STRING_LENGTH - 1)] = '';
strncpy(result_string, p, (MAX_STRING_LENGTH - 1)); //Copy characters from original_string start to find_string st$
return(1);
}
return(0);
}
/* Using the function:
#define MAX_STRING_LENGTH 1024
char source_string[] = {"There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form"};
char find_string[] = {" but "};
char result_string[MAX_STRING_LENGTH];
string_get_string_after_string (source_string, find_string, result_string);
printf("nAfter string:n[%s]n", result_string);
*/
