Σπουδάζω μηχ Η/Υ και εξασκούμαι στην C
Γράφω ένα πρόγραμμα(άσκηση για την ακρίβεια) στο οποίο διαβάζονται συμβολοσειρές οι οποίες αποθηκέυονται σε έναν πίνακα από pointers σε char.
Ο σκοπός είναι οι λέξεις της συμβολοσειράς να εκχωρηθούν σε ένα νέο string νέου μεγέθους,έτσι ώστε οι διαδοχικές λέξεις να έχουνε μεταξύ τους ένα κενό.
Το πρόβλημά μου είναι ότι στην εκτύπωση δεν εκτυπώνεται η νέα συμβολοσειρά,κάνοντας το πρόγραμμα άχρηστο
Παραθέτω τον κώδικα,όποιος μπορεί να εντοπίσει που βρίσκεται το πρόβλημα,πραγματικά θα με βοηθήσει πολύ γιατί τα νεύρα μου έχουνε τεντώσει.
- Κώδικας: Επιλογή όλων
echo\"
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAXWORDS 5
#define WORDSIZE 20
void check_memory(char *); //Dilosi sunartisis pou kanei elegxo gia tin dunamiki diaxeirisi mnimis//
void clear_memory(char *, char **); //Dilosi sunartisis pou apeleu8eronei tin dynamika deusmeumeni mnimi//
int main (int argc, char *argv[]) {
int i,words_size;
char *words[MAXWORDS];
char *new_string;
words_size = 0;
for (i=0; i<MAXWORDS; i++) {
words[i] = (char *)malloc(sizeof(char)*WORDSIZE); //Dynamiki desmeusi mnimis//
check_memory(words[i]); //klisi sunartisis gia ton elegxo mnimis//
scanf("%s",words[i]); //eisagogi leksis apo ton xristi//
if( i < (MAXWORDS - 1) ) { //Elegxos oste na kataxori8ei stin new_string o apaitoumenos xoros//
words_size = strlen(words[i]) + 1;
}
else {
words_size = strlen(words[i]);
}
}
new_string = (char *)malloc(sizeof(char)*words_size); //Dynamiki desmeusi mnimis//
check_memory(new_string); //klisi sunartisis gia ton elegxo mnimis//
for (i=0; i<MAXWORDS; i++) { //Se auto to simio ''metaferontai'' ta stoixeia apo tin words stin new_string//
if ( (i = (MAXWORDS - 1) ) ) {
strcat(new_string,words[i]);
}
else {
strcat(new_string," "); //oses lekseis einai diadoxikes exoune ena keno anamesa tous//
strcat(new_string,words[i]);
}
}
printf("%s\n ", new_string);
clear_memory(new_string,words);
return 0;
}
void check_memory(char *mem) {
if (mem==NULL) {
printf("Memory allocation error\n");
exit(1);
}
}
void clear_memory(char *string, char **words_cleanse){
int i;
free(string);
for (i=0; i<MAXWORDS; i++) {
free(words_cleanse[i]);
}
}
\";



.