Δημοσιεύτηκε: 12 Αύγ 2011, 13:31
από stamatiou
migf1 έγραψε:Δίνω και τη δική μου λύση:

Spoiler: show
Κώδικας: Επιλογή όλων

#include <stdio.h>
#include <stdlib.h>

// ---------------------------------------------------------------------------------
// διαχείριση αποκλειστικά με δείκτες
//
size_t mystrlen1( const char *s )
{
if ( !s )
return -1;

const char *cp = s;
while ( *++cp )
;
return cp-s;
}
// ---------------------------------------------------------------------------------
// διαχείριση με μετρητή
//
size_t mystrlen2( const char s[] )
{
if ( !s )
return -1;

size_t i=0;
while ( s[++i] )
;
return i;
}
// ---------------------------------------------------------------------------------
int main ( void )
{
char s[] = "123";

printf("mystrlen1(\"%s\") = %d\n", s, mystrlen1( s ) );
printf("mystrlen2(\"%s\") = %d\n", s, mystrlen2( s ) );

exit( EXIT_SUCCESS );
}

Συγκριτικά με την στάνταρ strlen() αυτές είναι βελτιωμένες ως προς το ότι ελέγχουν και την περίπτωση κατά την οποία τους περαστεί NULL ως όρισμα, οπότε κι επιστρέφουν -1 σαν αποτέλεσμα. Στην στάνταρ strlen() αν της περάσουμε NULL ως όρισμα, κράσαρει.

Αν δεν καταλαβαίνετε κάτι στον κώδικα, πείτε να το διευκρινίσουμε περαιτέρω.
Εκει που γράφει ++i και το ίδιο για τον pointer αφού προσθέτει πριν το ελέγξει το while πώς ελέγχεται το πρώτο char; Επίσης στο πρώτο τι κάνει ακριβώς εκείνο το return;