Δημοσιεύτηκε: 11 Αύγ 2011, 22:32
από 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 ως όρισμα, κράσαρει.

Αν δεν καταλαβαίνετε κάτι στον κώδικα, πείτε να το διευκρινίσουμε περαιτέρω.

EDIT: Διορθώθηκε bug στον κώδικα!