File: memccpy2.c

package info (click to toggle)
valgrind 1%3A3.24.0-3
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 176,332 kB
  • sloc: ansic: 795,029; exp: 26,134; xml: 23,472; asm: 14,393; cpp: 9,397; makefile: 7,464; sh: 6,122; perl: 5,446; python: 1,498; javascript: 981; awk: 166; csh: 1
file content (33 lines) | stat: -rw-r--r-- 1,147 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <stdlib.h>
 
int main(void)
{
   char* astring = strdup("this is a string # with something to seek");
   size_t len = strlen(astring);
   memccpy(astring+10, astring, '#', len-10);
   sprintf(astring, "this is a string # with something to seek");
   memccpy(astring, astring+10, '#', len);
   
   sprintf(astring, "this is a string # with something to seek");
   /*
    * space is earlier than len, no overlap
    * "this " gets copied (up to and including the first ' ')
    * and it overwrites the destination starting with the 's' of "string"
    * so res will point to the 'g' of "string"
    */
   char* res = memccpy(astring+10, astring, ' ', len-10);
   assert(res && *res == 'g');
   sprintf(astring, "this is a string # with something to seek");
   /* length is 0, nothing copied, returns NULL */
   res = memccpy(astring, "abcdefhhijklmnopqrstuvwxy", 'z', 0);
   assert(NULL == res);
   /* 'z' not found so 20 bytes copied, returns NULL */
   res = memccpy(astring, "abcdefhhijklmnopqrstuvwxy", 'z', 20);
   assert(NULL == res);
   free(astring);
}