Δημοσιεύτηκε: 11 Αύγ 2011, 15:41
από migf1
Το error στο βγάζει γιατί τον *pointer τον ορίζεις δείκτη σε int αλλά του εκχωρείς διεύθυνση char (το s[0] είναι char, άρα το &s[0] είναι διεύθυνση από char).

Σε ότι αφορά το κώδικα, το 'χεις πιάσει το γενικό νόημα αλλά με κάποιες ελλείψεις. Π.χ. δεν χρειάζεται να ελέγχεις για '\n' στη συνθήκη του while. Ο χαρακτήρας που σηματοδοτεί το τέλος ενός string είναι ο '\0'. Άρα είναι απόλυτα θεμιτό να υπάρχουν '\n' χαρακτήρες μέσα σε ένα string (π.χ. μπορεί να περιέχει τα περιεχόμενα ενός text editor, άρα θα υπάρχουν πολλοί '\n' μέσα στο string, για τις αλλαγές των γραμμών).

Επίσης, οι συναρτήσεις επιστρέφουν το μήκος του string μετρώντας και τον μηδενικό χαρακτήρα στο τέλος, ενώ η εκφώνηση επισημαίνει πως δεν πρέπει να τον συμπεριλαμβάνουν στο αποτέλεσμα που επιστρέφουν (όπως ακριβώς δεν τον συμπεριλαμβάνει η κανονική strlen).

Και τέλος, δεν είναι σοφή πρακτική να ονοματίζεις τις συναρτήσεις σου με ονόματα στάνταρ συναρτήσεων. Σου άλλαξα τον κώδικά σου (δες παρακάτω)... μένει να τον φτιάξεις να μην συμπεριλαμβάνει τον μηδενικό χαρακτήρα στο μήκος που επιστρέφει.

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

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

// ----------------------------------------------------------------------------------
size_t mystrlen( const char *s )
{
size_t size = 0;
const char *pointer = s;
while ( *pointer != '\0' ) {
size++;
pointer++;
}
return size;
}
// ----------------------------------------------------------------------------------
size_t mystrlen2( const char s[] )
{
size_t size = 0;
int counter = 0;

while( s[counter] != '\0') {
size++;
counter++;
}
return size;
}
// ----------------------------------------------------------------------------------
int main( void )
{
char inbuf[256];
int size = 0;

printf("Enter the string: ");
fgets(inbuf, 256, stdin);

size = mystrlen(inbuf);
printf("The length of the string is %d\n", size);

return 0;
}

Αν δεν ασχοληθεί άλλος να δώσω κι εγώ τις λύσεις, γιατί διαφέρουν από τις λύσεις του φίλου Σταματίου.