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

Βοήθεια σε απλό προγραμματάκι C


kopunisher

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

Δημοσ.

Καλησπέρα,

αντιμετωπίζω κάτι προβληματάκια στο παρακάτω πρόγραμμα

Ο σκοπός του προγράμματος είναι ο ο χωρισμός ενός μεγάλου 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);
}


}

Δημοσ.
Το πρώτο που πήρε το μάτι μου

>temp[MAX_TX]='\0';

 

Είναι λάθος αυτό ως έκφραση; Η συνάρτηση stringsend.... απαιτεί ως όρισμα κάποιο string ή δείκτη σε string και άρα τον χαρακτήρα τερματισμού.

Πάντως το πρόγραμμα για ορισμένες τιμές του MAX_TX λειτουργεί σωστά...

Δημοσ.

Κατά τα άλλα βάζεις τον χαρακτήρα τερματισμού πάντα στο τέλος του μπάφερ και έτσι άμα δεν είναι γεμάτος θα στέλνει και λίγα αλαμπουρνέζικα.

Δημοσ.
Ναι αλλά πέφτει έξω από τα όρια του πίνακα. Πρέπει να το δηλώσεις

>unsigned char temp[MAX_TX+1];

 

Κάπως βελτιώθηκε η κατάσταση;, αλλά για string πάνω από 250-280 χαρακτήρες κατάφερα να αναπαράγω το λάθος και το πρόγραμμα πέφτει σε infinite loop

 

 

opa στείλαμε ταυτόχρονα. Ναι οκ τα αλαμπουρνεζικα δεν αποτελούν ιδιαίτερο πρόβλημα.

Δημοσ.

Δεν σας βγάζει μια προειδοποίηση όταν βάζετε μεγάλο 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 είσαι γρήγορος ( ή εγώ κοιμάμαι και δεν το ξέρω ;))

Δημοσ.
Κάντα int

>unsigned char j,k;

 

Αμαν αυτό μου ξέφυγε τελείως, γιατί δουλευω σε 8μπιτ μικροελεγκτή και το native είναι το char!!!

Πρέπει να λύθηκε το πρόβλημα, σε ευχαριστώ πολύ!!!!

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

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

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