kopunisher Δημοσ. 22 Ιουνίου 2007 Δημοσ. 22 Ιουνίου 2007 Καλησπέρα, αντιμετωπίζω κάτι προβληματάκια στο παρακάτω πρόγραμμα Ο σκοπός του προγράμματος είναι ο ο χωρισμός ενός μεγάλου string(>800 chars) σε έναν transmission buffer με μέγεθος ΜΑΧ_ΤΧ. Κάτι δεν λαμβάνω υπόψη και το πρόγραμμα δεν δουλευει για όλες τις τιμές του ΜΑΧ_ΤΧ. Αν μπορεί κάποιος να το κοιτάξει, γιατί είναι απλό και έχω κολλήσει ασχημα!!! >#include <stdio.h> #include <string.h> //#include <reg1210.h> #define MAX_TX 100 void main(void){ unsigned char confirmation[]= {"we all live in a yellow submarine"}; unsigned char temp[MAX_TX]; unsigned char j,k; printf("%d\n",strlen(confirmation)); k=0; while (k <= strlen(confirmation)){ j=0; while((j<MAX_TX) && (k <= strlen(confirmation))){ temp[j]=confirmation[k]; j++; k++; } temp[MAX_TX]='\0'; } //stringsend_socket_tcp(0,temp); printf("k=%d SENDING %s\n",k,temp); } }
bilco Δημοσ. 22 Ιουνίου 2007 Δημοσ. 22 Ιουνίου 2007 Το πρώτο που πήρε το μάτι μου >temp[MAX_TX]='\0';
kopunisher Δημοσ. 22 Ιουνίου 2007 Μέλος Δημοσ. 22 Ιουνίου 2007 Το πρώτο που πήρε το μάτι μου >temp[MAX_TX]='\0'; Είναι λάθος αυτό ως έκφραση; Η συνάρτηση stringsend.... απαιτεί ως όρισμα κάποιο string ή δείκτη σε string και άρα τον χαρακτήρα τερματισμού. Πάντως το πρόγραμμα για ορισμένες τιμές του MAX_TX λειτουργεί σωστά...
bilco Δημοσ. 22 Ιουνίου 2007 Δημοσ. 22 Ιουνίου 2007 Ναι αλλά πέφτει έξω από τα όρια του πίνακα. Πρέπει να το δηλώσεις >unsigned char temp[MAX_TX+1];
bilco Δημοσ. 22 Ιουνίου 2007 Δημοσ. 22 Ιουνίου 2007 Κατά τα άλλα βάζεις τον χαρακτήρα τερματισμού πάντα στο τέλος του μπάφερ και έτσι άμα δεν είναι γεμάτος θα στέλνει και λίγα αλαμπουρνέζικα.
kopunisher Δημοσ. 22 Ιουνίου 2007 Μέλος Δημοσ. 22 Ιουνίου 2007 Ναι αλλά πέφτει έξω από τα όρια του πίνακα. Πρέπει να το δηλώσεις >unsigned char temp[MAX_TX+1]; Κάπως βελτιώθηκε η κατάσταση;, αλλά για string πάνω από 250-280 χαρακτήρες κατάφερα να αναπαράγω το λάθος και το πρόγραμμα πέφτει σε infinite loop opa στείλαμε ταυτόχρονα. Ναι οκ τα αλαμπουρνεζικα δεν αποτελούν ιδιαίτερο πρόβλημα.
tzekas Δημοσ. 22 Ιουνίου 2007 Δημοσ. 22 Ιουνίου 2007 Δεν σας βγάζει μια προειδοποίηση όταν βάζετε μεγάλο MAX_TX? ( >255) >[Warning] comparison is always true due to limited range of data type Μήπως να άλλαζες τα >unsigned char j,k; σε >int j,k; ??? ------------------------------------------------------------------------------- edit : lol ρε, bilco είσαι γρήγορος ( ή εγώ κοιμάμαι και δεν το ξέρω )
kopunisher Δημοσ. 22 Ιουνίου 2007 Μέλος Δημοσ. 22 Ιουνίου 2007 Κάντα int >unsigned char j,k; Αμαν αυτό μου ξέφυγε τελείως, γιατί δουλευω σε 8μπιτ μικροελεγκτή και το native είναι το char!!! Πρέπει να λύθηκε το πρόβλημα, σε ευχαριστώ πολύ!!!!
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.