Προς το περιεχόμενο

Μπλέχτηκαν οι δείκτες...


eirinikp

Προτεινόμενες αναρτήσεις

Δημοσ.

Έχω μία ακόμα ερωτησούλα:

Πρέπει να υλοποιήσω τη συνάρτηση

char* function( const char *a );

Οι τύποι των ορισμάτων και του output δεν επιτρέπεται να αλλάξουν. Δηλαδή τα const μένουν εκεί που είναι.

Μέσα στη συνάρτηση έχω το εξής:

 

>
char* function( const char *a )
{
 char *output_str;
 int i = 3;

 output_str = a + i;
 
 return output_str;
}

Δηλαδή επιστρέφει ένα char* που δείχνει σε κάποια άλλη θέση του input. (Ας υποθέσουμε ότι όλα είναι "καλώς ορισμένα")

Όμως δεν μπορώ να κάνω ανάθεση από το a+i στο output_str επειδή το ένα είναι const και το άλλο όχι. Ο compiler λεει"warning: assignment discards qualifiers from pointer target type". Εμένα το μόνο που με νοιάζει είναι να δείχνει το output_str στη συγκεκριμένη θέση. Πώς μπορώ να το λύσω?

Δημοσ.

Για τσέκαρε με αυτή τη συνάρτηση:

 

>
char *Function(const char *pszStr, int pszPosition)
{
/* Error Checking. */
if(!pszStr)
{
	printf("Error: NULL string.\n");
	return NULL;
}
if(pszPosition < 0 || pszPosition > (int)strlen(pszStr))
{
	printf("Error:%s\n", pszPosition < 0 ? "Invalid negative index number.\n" : "Invalid index greater than string length.\n");
	return NULL;
}
/* Return Value. */
return (char*)&pszStr[pszPosition];
}

 

Να προσέχεις με τα const γιατί αυτά είναι το πρόβλημα στην συνάρτηση σου. Λέγοντας ότι ένας char* ptr είναι ίσος με ένα const char* ptr τότε υπάρχει πρόβλημα γιατί ο compiler οφείλει να σε προειδοποιήσει ότι δεν μπορείς να αλλάξεις τον const δείκτη μέσω του non const δείκτη. Πρέπει να κάνεις και τον output const για να μην έχεις πρόβλημα.

Δημοσ.

return (char*)&pszStr[pszPosition];

Αυτό κρατάω από όσα έγραψες. Ευχαριστώ πολύ!

Όλα τα υπόλοιπα δεν χρειαζόταν να τα γράψεις γιατί για να μην παιδεύεστε είχα πει ότι υποθέτουμε ότι όλα είναι "καλώς ορισμένα"! (Δε φτάνει που μου απαντάς, να κάθεσαι να γράφεις και όλους τους ελέγχους κρίμα!)

 

Ευχαριστώ και πάλι!

Δημοσ.

Πάντως αυτά τα "περιττά" που έγραψε ο bokarinho είναι που σε σώζουν πολλές φορές και κάνουν το πρόγραμμα σου όντως καλό.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...