ΠΕΡΙΕΧΟΜΕΝΑ

 

1.  memccpy( )

2.  memchr( )

3.  memcmp( ) / memicmp( )

4.  memcpy( )

5.  memmove( )

6.  memset( )

 

 

 

 

Ζ. MEMORY  FUNCTIONS

 

 

 

1.  memccpy( ) 

 

            Τα πρωτότυπά της βρίσκονται στα <mem.h> και <string.h>:

 

void *memccpy( void *dest, void *source, unsigned char ch, unsigned count)

 

            Αντιγράφει τα περιεχόμενα του τμήματος μνήμης που δείχνεται από τον pointer source, στο σημείο μνήμης που δείχνεται από τον pointer dest. Η διαδικασία αντιγραφής σταματάει είτε όταν count αριθμός bytes αντιγραφούν, είτε όταν συναντηθεί η πρώτη ομοιότητα με το ch.

 

Π.χ.:     char str[20], out[20];

            strcpy( str, “hello there”);

            memccpy(out, str, ‘  ‘, 20);

 

            Μετά την εκτέλεση του παραπάνω τμήματος κώδικα θα μεταφερθεί στον πίνακα out  η τιμή hello, γιατί το κενό ‘ ‘ χρησιμοποιείται για έλεγχο stop.

 

 

 

2.  memchr( ) 

 

            Τα πρωτότυπά της βρίσκονται στα <mem.h> και <string.h>:

 

void *memchr( void *buffer, char ch, unsigned count)

 

            Ψάχνει τον buffer για την πρώτη ομοιότητα του ch στους πρώτους count χαρακτήρες. Επιστρέφει έναν pointer στην πρώτη ομοιότητα του ch μέσα στον buffer ή έναν null pointer, αν το ch δε βρεθεί.

 

Π.χ.:     #include<string.h>

            Main( )

            {

              void *p;

              p = memchr( “This is a test”, ‘ ‘ , 14);

              printf ( ( char * ) p);

            }

 

            Θα εμφανίσει is a test στην οθόνη.

 

 

3.  memcmp( ) / memicmp( ) 

 

            Τα πρωτότυπά της βρίσκονται στα <mem.h> και <string.h>:

 

void *memcmp( void *buf1, void *buf2, unsigned count)

void *memicmp( void *buf1, void *buf2, unsigned count)

 

            Η memcmp( ) συγκρίνει τους πρώτους count χαρακτήρες των πινάκων buf1 και buf2. Η σύγκριση γίνεται λεξικογραφικά. Η συνάρτηση επιστρέφει έναν ακέραιο ο οποίος ερμηνεύεται ως εξής:

 

 

Value

 

<0

0

>0

Έννοια

 

buf1<buf2

buf1=buf2

buf1>buf2



            Η συνάρτηση memicmp( ) εκτελεί την ίδια λειγουργία με την memcmp( ), με τη διαφορά ότι τα κεφαλαία είναι ίσα με τα μικρά.

 

Π.χ.:              #include <string.h>

                     main (int argc, char *argv[ ] )

                     {

                        int = outcome, len, 11, 12;

                        len = (11 = strlen(argv[1]))< (12= strlen(argv[2]))? 11:12;

                        outcome = memcmp (argv[1], argv[2], len);

                        if (!outcome) printf (“Equal”);

                        else if (outcome<0) printf(“1st less than 2nd”);

                                                else printf( “1st greater than 2nd”);

                     }

 

            Το παραπάνω πρόγραμμα δείχνει το αποτέλεσμα της σύγκρισης δύο command line arguments βρίσκοντας το μέγεθος του μικρότερου.

 

 

 

4.  memcpy( ) 

 

            Τα πρωτότυπά της βρίσκονται στα <mem.h> και <string.h>:

 

void *memcpy( void *dest, void *source, unsigned count)

 

            Αντιγράφει count χαρακτήρες από το source στο dest. Η συνάρτηση επιστρέφει έναν pointer στο dest.

 

Π.χ.:            #include <string.h>

                   #define SIZE 80

                   main( )

                   {

                     char buf1[SIZE], buf2[SIZE];

                     strcpy (buf1, “When the source…”);

                     mempcy (buf2, buf1, SIZE);

                     printf(buf2);

                   }

 

            Το παραπάνω πρόγραμμα αντιγράφει το περιεχόμενο του buf1 στο buf2 και το εμφανίζει στην οθόνη.

 

 

5.  memmove( ) 

 

            Τα πρωτότυπά της βρίσκονται στα <mem.h> και <string.h>:

 

void *memmove( void *dest, void *source, unsigned count)

 

            Αντιγράφει count χαρακτήρες από το source στο dest. Αν έχουμε array overlap, η αντιγραφή γίνεται κανονικά αντιγράφοντας τους σωστούς χαρακτήρες στο dest, αλλά αφήνοντας το source τροποποιημένο.

 

Π.χ.:            #include <string.h>

                   #define SIZE 80

                   main( )

                   {

                     char str1[SIZE], str2[SIZE];

                     strcpy (str1, “Panathinaikos”);

                     memmove (str2, str1, SIZE);

                     printf(str2);

                   }

 

 

6.  memset( ) 

 

            Τα πρωτότυπά της βρίσκονται στα <mem.h> και <string.h>:

 

void *memset( void *buf, char ch, unsigned count)

 

            Αντιγράφει το low-order-byte του ch στους πρώτους count χαρακτήρες του πίνακα buf.

 

            Η συνάρτηση επιστρέφει buf. Η πιο γνωστή χρήση αυτής της συνάρτησης είναι για να αρχικοποιήσουμε ένα τμήμα της μνήμης σε κάποια γνωστή τιμή.

 

Π.χ.:            memset (buf, ‘ \0 ’, 100);

                   memset (buf, ‘ x ‘ 10);

                   printf( ( char *) buf);

 

            Το παραπάνω παράδειγμα πρώτα αρχικοποιεί τα 100 πρώτα bytes του πίνακα που δείχνεται από το buf, και έπειτα θέτει τα 10 πρώτα bytes στην τιμή ‘x’ και εμφανίζει το string “ xxxxxxxxxx”.

 

            Όπως βλέπουμε, η αρχικοποίηση των 100 πρώτων bytes γίνεται με τη χρήση του \ 0 = NULL.