ΠΕΡΙΕΧΟΜΕΝΑ
Ζ. MEMORY
FUNCTIONS
Τα
πρωτότυπά της βρίσκονται στα <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.
Τα
πρωτότυπά της βρίσκονται στα <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
στην οθόνη.
Τα
πρωτότυπά της βρίσκονται στα <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
βρίσκοντας το μέγεθος του μικρότερου.
Τα
πρωτότυπά της βρίσκονται στα <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 και το
εμφανίζει στην οθόνη.
Τα
πρωτότυπά της βρίσκονται στα <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);
}
Τα
πρωτότυπά της βρίσκονται στα <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.