Συντονιστής: konnn


Star_Light έγραψε:Bασικα τo char δεν εχουμε πει οτι ειναι μέγεθος 1 byte ??? πως και το βάζεις 4 ? στα 2 πρωτα?
char *s
char *s = NULLέγραψε:στο 4 πχ το 1 byte που βάζεις ειναι επειδη τουλαχιστο θα έχει τον κενό χαρακτήρα? ακομη και αν ο χρηστης δεν δωσει καμια συμβολοσειρα.
- Κώδικας: Επιλογή όλων
char s[] = ""; // αρχικοποιημένο string (1 byte)
έγραψε:ΣΤο 5 και 6 συμφωνουμε οκ στο 7 παιρνει την τιμη του μεγέθους του πίνακα ε?
- Κώδικας: Επιλογή όλων
char s[] = "testing"; // αρχικοποιημένο string (8 bytes)
char s[8] = "testing"; // αρχικοποιημένο string (8 bytes)
char s[100] = "testing"; // αρχικοποιημένο string (100 bytes)
έγραψε:και στο 8 οκ.
- Κώδικας: Επιλογή όλων
char s[80]; // μη-αρχικοποιημένο string (80 bytes)
έγραψε:ΤΩρα κατι αλλο... δεν ειναι ισοδυναμο να πω ας πουμε οτι το char *s="testing" ειναι ενας δεικτης σε συμβολοσειρα testing με το αρχικοποιημενο string που λες και εσυ?
char *ps[STRINGSIZE];
char **ps;
έγραψε:
Π.Σ Στο μεταξυ εκανα και τα test cases και στον κωδικα με την συναρτηση για τις δυναμεις και διαπιστωσα πως ολα οκ εκτος και αν και η βάση αλλα και ο εκθέτης ειναι διψηφιοι εκει πλεον το αποτελεσμα ξεφευγει και δεν δινει σωστες τιμες. Εδω ας πουμε τι θα μπορουσαμε να κανουμε ?

Star_Light έγραψε:
...
Π.Σ Στο μεταξυ εκανα και τα test cases και στον κωδικα με την συναρτηση για τις δυναμεις και διαπιστωσα πως ολα οκ εκτος και αν και η βάση αλλα και ο εκθέτης ειναι διψηφιοι εκει πλεον το αποτελεσμα ξεφευγει και δεν δινει σωστες τιμες. Εδω ας πουμε τι θα μπορουσαμε να κανουμε ?

char s[100];char s[100] = "testing";char s[] = "testing";char s[100] = { 't', 'e', 's', 't', 'i', 'n', 'g' };
int numbers[100];
int main( void) {
...
}
int main( void) {
int numbers[100];
...
}
int main( void) {
int numbers[100] = { 0 };
...
}
int main( void) {
int numbers[100] = { 5, 5 };
...
}
int main( void) {
int numbers[100] = { 3, 10, 7 };
...
}
int main( void) {
int numbers[2] = { 3, 10, 7 };
...
}char s[100] = { 't', 'e', 's', 't', 'i', 'n', 'g' };char s[7] = { 't', 'e', 's', 't', 'i', 'n', 'g' };char s[7] = "testing";char s[7] = { 't', 'e', 's', 't', 'i', 'n', 'g' };char *s = "testing";
char *s="testing"; 
ls | grep mpfr.h int *ptr;
printf("%ld",sizeof(ptr)); 
Star_Light έγραψε:Ειμαστε τελειως ενταξει! Εκτος απο τοπου ειπα πως ειναι pointer σε string να ξεκαθαρισω πως εννοουσα οτι το s ειναι δεικτης σε string. Βεβαια αν θεωρειται παλι λαθος αυτο που γράφω ισως θεωρειται επειδη το s επι της ουσιας ειναι απλα ενας δεικτης σε χαρακτηρα οποτε μολις συναντησει τον '\0' θα πουμε οτι τελικα τελειωσε η συμβολοσειρα... Ισως η διατυπωση δεν ειναι σωστη που λεω αλλα εχω καταλαβει τι ακριβως ειναι
- Κώδικας: Επιλογή όλων
char *s="testing";

migf1 έγραψε:Star_Light έγραψε:Ειμαστε τελειως ενταξει! Εκτος απο τοπου ειπα πως ειναι pointer σε string να ξεκαθαρισω πως εννοουσα οτι το s ειναι δεικτης σε string. Βεβαια αν θεωρειται παλι λαθος αυτο που γράφω ισως θεωρειται επειδη το s επι της ουσιας ειναι απλα ενας δεικτης σε χαρακτηρα οποτε μολις συναντησει τον '\0' θα πουμε οτι τελικα τελειωσε η συμβολοσειρα... Ισως η διατυπωση δεν ειναι σωστη που λεω αλλα εχω καταλαβει τι ακριβως ειναι
- Κώδικας: Επιλογή όλων
char *s="testing";
Ναι, το ξέρω πως έχεις καταλάβει
Με την διατύπωση υπάρχει γενικότερο θέμα, διότι τα strings δεν υποστηρίζονται εγγενώς από τη C, οπότε πολύ συχνά ο καθένας τα διατυπώνει και διαφορετικά
Αν συμφωνήσουμε όμως πως κατά βάση τα strings είναι πίνακες χαρακτήρων, τότε λέγοντας δείκτης σε string είναι σαν να λέμε δείκτης σε πίνακα χαρακτήρων. Μιλάμε δηλαδή για διπλό δείκτη και όχι για μονό
Για την μαθηματική βιβλιοθήκη, ψάξε να βρεις το .a αρχείο της για την πλατφόρμα σου (αν διατίθεται)... π.χ. libmpfr.a ή όπως αλλιώς λέγεται, βάλε την στον φάκελο που βρίσκονται και οι υπόλοιπες βιβλιοθήκες του gcc και όταν κάνεις compile το πρόγραμμά σου βάλε στη γραμμή εντολών του gcc στο τέλος ένα -lmpfr.
Αλλιώς βάλε το αρχείο .a σε ένα φάκελο της αρεσκείας σου και δήλωσέ το με κεφαλαίο L στην γραμμή εντολών του gcc.
Αν δεν διατίθεται το .a αρχείο, θα χρειαστεί να κατεβάσεις τον πηγαίο κώδικα της βιβλιοθήκης και να τον κάνεις compile μόνος σου (συνήθως σου δίνουν έτοιμα makefiles για κάθε πλατφόρμα.
Για την άλλη ερώτηση, για το αν χρειάζεται να γίνουν long και τα ορίσματα εκτός από την τιμή επιστροφής της συνάρτησης, λογικά δεν χρειάζεται.
Για το μέγεθος των δεικτών που σου βγάζει 8 bytes, τόσο είναι το σύνηθες σε 64μπιτες πλατφόρμες (και 4 bytes σε 32μπιτες).
Τέλος, για να συνεχίσουμε με τα strings περιμένω το ΟΚ από τον φίλο stamatiou

char s[100]="testing" char s[] = ""; char usernme[32]; 