Δημοσιεύτηκε: 16 Φεβ 2012, 10:50
από migf1
Star_Light έγραψε:Απλα δεν μπορω να καταλάβω γιατι μου είπες αυτο με τα στατικά strings.... άλλωστε μεσω της define ιδιο μήκος τα ορισα εξαρχής.

Σου είπα πως είναι αδύνατον να εναλλάξεις 2 στατικά strings διαφορετικού μέγιστου μήκους.

έγραψε:
Spoiler: show
Κώδικας: Επιλογή όλων


#include<stdio.h>
#include<string.h>
#define SIZE 15

int main()
{
char s[SIZE]={'\0'};

printf(" Give a string : ");
fgets(s , SIZE , stdin);
puts("\n");

printf(" Η συμβολοσειρά που δόθηκε ειναι η : %s " , s );
printf( " Το μέγεθος του τρέχοντος μήκους του string που δώσατε ήταν : %ld \n" , strlen(s) + 1 );
printf( " Το μέγιστο μήκος / μέγεθος της συμβολοσειράς θα πρέπει να είναι : %ld \n " , sizeof(s));

return 0;
}


Κώδικας: Επιλογή όλων


Give a string : Nick


Η συμβολοσειρά που δόθηκε ειναι η : Nick
Το μέγεθος του τρέχοντος μήκους του string που δώσατε ήταν : 5
Το μέγιστο μήκος / μέγεθος της συμβολοσειράς θα πρέπει να είναι : 15

Μετράει και το ENTER? :S

Ναι, γιατί δεν το έσβησες μετά την fgets().

Το παρακάτω δίνει σωστό αποτέλεσμα;

Κώδικας: Επιλογή όλων

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define SIZE 15
#define pressENTER() \
do{ \
char mYcHAr; \
printf( "press ENTER..." ); \
while ( (mYcHAr=getchar()) != '\n' && mYcHAr != EOF ) \
; \
}while(0)

void foo( char s[SIZE] )
{
printf( "Η συμβολοσειρά που δόθηκε ειναι η: %s\n" , s );
printf( "Το μέγεθος του τρέχοντος μήκους του string που δώσατε ήταν: %lu \n",
strlen(s) + 1
);
printf( "Το μέγιστο μήκος της συμβολοσειράς θα πρέπει να είναι: %lu \n",
sizeof(s)
);

return;
}

int main( void )
{
char s[SIZE]={'\0'};

printf("Give a string : ");
fgets(s , SIZE , stdin);

foo(s);

pressENTER();
exit( EXIT_SUCCESS );
}

Επίσης, μην μπλέκεις σαν όρους το μήκος (σε χαρακτήρες) με το μέγεθος (σε bytes).