ΠΕΡΙΕΧΟΜΕΝΑ

 

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’ και εμφανίζει το stringxxxxxxxxxx”.

 

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