Ωραιος ο κωδικας !! Κατσε να τον κανω ενα paste στο Geany
να του βάλω σχόλια και επανέρχομαι.
Συντονιστής: konnn



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXINPUT 256+1 /* max # of chars to read from stdin */
int main( void )
{
char input[ MAXINPUT ] = {'\0'}; /* c-string, for reading 1 stdin line*/
char *s = NULL; /* c-string (read from stdin) */
int maxlen = 0; /* max len of s (read from stdin) */
int len = 0; /* current len of s (will calculate) */
do {
printf("Give the len: ");
fgets( input, MAXINPUT, stdin );/* read the whole stdin line as input */
maxlen = atoi(input); /* convert to int & assign to maxlen */
} while ( maxlen < 1 ); /* demand positive, non-zero maxlen */
maxlen++; /* for the '\0' at the end */
s = calloc(maxlen, sizeof(char)); /* alloc memory & make s point to it */
if ( !s ) { /* mem allocation failed */
fputs("*** error, out of memory!\n", stderr);
exit( EXIT_FAILURE ); /* exit program with failure signal */
}
printf("Give a string : ");
fgets(s, maxlen, stdin); /* read s directly from stdin */
len = strlen(s); /* calc current len of given s */
if ( s[ len-1 ] == '\n' ) /* check if s has a '\n' before '\0'*/
s[ len-1 ] = '\0'; /* ... and remove it if it has */
printf("You gave the string: %s\n", s);
system("pause");
free( s ); /* release mem reserved for s */
exit( EXIT_SUCCESS);
}


Star_Light έγραψε:Αν σαν είσοδο δώσεις το Kostas
Toτε το len που επιστρέφεται απο την strlen(s) είναι 6
οποτε εσυ πας στο s[5] δηλαδη στο s το τελικο και βλέπεις αν ειναι '\n' .
Τον έλεγχο εσυ τον έχεις δώσει μονο που σε περίπτωση ο χρήστης δώσει
μήκος μεγαλύτερο απο αυτο που τελικά θα αποφασίσει να πληκτρολογήσει.
Δηλαδη άν εγω δώσω 3 και πληκτρολογήσω Ko και πατήσω ENTER έχω
-> s[0] = 'K'
s[1] = 'o'
s[2] ='\n'
και εσυ στο s[2] πας και βάζεις '\0' οκ?
έγραψε:Να υποθέσω το μονο λάθος υπήρχε σε σημεία του κώδικα που σχετίζονταν με το παραπάνω ?

migf1 έγραψε:
...
Όχι, είχες λάθη στις αρχικοποιήσεις, χρησιμοποιούσες για είσοδο την scanf() (που έχουμε πει πως δεν πρέπει) δεν ήλεγχες για το αν απέτυχε η callloc()... και δεν θυμάμαι τι άλλο.


Star_Light έγραψε:
...Με την θέση των αλλων χαρακτήρων που δεσμεύτηκαν ομως αλλα δεν δοθηκαν ποτε
τι ακριβως γινεται? σε αυτη την περιπτωση??? memory leak?![]()

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXSLEN (80+1)
void Display_reverse(char *s);
int main()
{
char *s = NULL;
int maxlen;
char input[MAXSLEN]={'\0'};
printf(" Give the len : ");
fgets(input , MAXSLEN , stdin);
maxlen = atoi(input);
s= calloc( maxlen , sizeof(char));
printf(" Give a string : ");
fgets( s , maxlen , stdin);
if( s == NULL)
puts("Calloc failed");
Display_reverse(s);
printf("%s" , s);
free(s);
return 0;
}
//----------------------------------------------------------------------
void Display_reverse(char *s)
{
char *cp;
for(cp = s; *cp!='\0' && *cp!='\n'; cp++)
putchar(*cp);
puts("\n");
return;
}
