memccpy
#include <stdio.h>
#include <string.h>
int main (int argc, char *argv[])
{
char src[] = "One, Two, Three, Four, Five";
char buff[256];
char *dest;
puts(src);
puts(""); // new line
// copy into buff src to first 'F' char
dest = memccpy(buff,src,'F',strlen(src));
*dest = '\0';
printf("dest : %s\n",dest);
printf("buff : %s\n",buff);
return 0;
}
OUTPUT :
// One, Two, Three, Four, Five
//
// dest :
// buff : One, Two, Three, F
memchr
#include <stdio.h>
#include <string.h>
int main (int argc, char *argv[])
{
char *str = "aaaAbbbAcccAddd";
int ch = 'A';
char *ptr;
printf("str : %s\n",str);
printf("ch : %c\n",ch);
ptr = memrchr(str,ch,strlen(str));
printf("pointer to first %c : %s\n",
(char)ch,ptr);
return 0;
}
OUTPUT :
// str : aaaAbbbAcccAddd
// ch : A
// pointer to first A : AbbbAcccAddd
memcmp
#include <stdio.h>
#include <string.h>
int main (int argc, char *argv[])
{
char buff1[] = "First String";
char buff2[] = "First string";
size_t cmp;
puts(buff1);
puts(buff2);
puts(""); // new line
cmp = memcmp(buff1,"First str",5);
if ( cmp == 0 )
puts("first 5 char buff1 and string are equal");
else if ( cmp < 0 )
puts("buff1 is less then string");
else
puts("buff1 is greater then string");
cmp = memcmp(buff1,buff2,strlen(buff1));
printf("cmp = %d\n",cmp);
if ( cmp == 0 )
puts("first 5 char buff1 and buff2 are equal");
else if ( cmp < 0 )
puts("buff1 is less then buff2");
else
puts("buff1 is greater then buff2");
return 0;
}
OUTPUT :
// First String
// First string
//
// first 5 char buff1 and string are equal
// cmp = -1
// buff1 is greater then buff2
memcpy
#include <stdio.h>
#include <string.h>
int main (int argc, char *argv[])
{
char *str = "One, Two, Three, Four, Five";
char buff1[256] = "\0";
char buff2[] = "aaaaaaaaaaaaaaaaaaaaaaaaaa";
puts(str);
puts(buff2);
puts(""); // new line
memcpy(buff1,str+5,10);
puts(buff1);
printf("Length of buff1 is %d\n",strlen(buff1));
memcpy(buff2+5,str+9,8);
puts(buff2);
printf("Length of buff2 is %d\n",strlen(buff2));
/* overlapping of the buff2 */
/* use memmove instead */
memcpy(buff2+5,str,strlen(str));
puts(buff2);
printf("Length of buff2 is %d\n",strlen(buff2));
return 0;
}
// One, Two, Three, Four, Five
// aaaaaaaaaaaaaaaaaaaaaaaaaa
//
// Two, Three
// Length of buff1 is 10
// aaaaa Three, aaaaaaaaaaaaa
// Length of buff2 is 26
// aaaaaOne, Two, Three, Four, Five Three
// Length of buff2 is 38
memmem
#define _GNU_SOURCE
#include <stdio.h>
int main (int argc, char *argv[])
{
char src[] = "first and last line";
char pattern[] = "line";
char *ptr;
printf("src : %s\n",src);
printf("pattern : %s\n",pattern);
puts(pattern);
ptr = (char*)memmem(src,strlen(src),
pattern,strlen(pattern));
printf("pointer to pattern : %s\n",ptr);
return 0;
}
OUTPUT :
// this function consists bug
// and is dangerous to use
//
// src : first and last line
// pattern : line
// line
// pointer to pattern : line
memmove
#include <stdio.h>
#include <string.h>
int main (int argc, char *argv[])
{
char *str = "One, Two, Three, Four, Five";
char buff[256] = "aaaaaaaaaaaaaaaaaaaaaaaaaa";
puts(str);
puts(buff);
puts(""); // new line
memcpy(buff,str+5,12);
puts(buff);
printf("Length of buff is %d\n",strlen(buff));
/* overlapping of the buff */
/* memcpy does it not correct */
memmove(buff+10,str,strlen(str));
puts(buff);
printf("Length of buff is %d\n",strlen(buff));
return 0;
}
// One, Two, Three, Four, Five
// aaaaaaaaaaaaaaaaaaaaaaaaaa
//
// Two, Three, aaaaaaaaaaaaaa
// Length of buff is 26
// Two, ThreeOne, Two, Three, Four, Five
// Length of buff is 37
memrchr
#include <stdio.h>
int main (int argc, char *argv[])
{
char *str = "aaaAbbbAcccAddd";
char *ptr;
int ch = 'A';
/* last occurrence of 'A' into str */
ptr = (char*)memrchr(str,ch,strlen(str));
puts(ptr);
return 0;
}
OUTPUT :
// Addd
memset
#include <stdio.h>
#include <string.h>
int main (int argc, char *argv[])
{
char buff1[] = "One, Two, Three, Four, Five";
char buff2[256];
puts(buff1);
puts(""); // new line
memset(buff1,'-', 9);
puts(buff1);
memset(buff1+17, '-',10);
puts(buff1);
puts("");
memset(buff2,'*',27);
memset(buff2+27,'\0',1);
puts(buff2);
return 0;
}
OUTPUT :
// One, Two, Three, Four, Five
//
// --------- Three, Four, Five
// --------- Three, ----------
//
// ***************************