Δημοσιεύτηκε: 30 Ιαν 2012, 20:45
από Star_Light
migf1 έγραψε:To * δεν προβάλλει τα περιεχόμενου ολόκληρου του string, αλλά μονάχα τα περιεχόμενα του 1ου χαρακτήρα μέσα στο string.
Οπότε, είτε γράψουμε: message[0], είτε γράψουμε: *message, το αποτέλεσμα είναι ο χαρακτήρας: 'M'

Τώρα σε ότι αφορά την ερώτηση περί εκτύπωσης, η: puts() είναι έτσι φτιαγμένη ώστε όταν της περνάς σαν όρισμα ένα c-string, να το τυπώνει ολόκληρο, και στο τέλος να τυπώνει και μια αλλαγή γραμμής. Και σημείωσε πως της περνάς σαν όρισμα το: message και όχι το *message.

Ουσιαστικά αυτό που κάνει η συνάρτηση είναι να ξεκινάει από την αρχή του c-string: message και να τυπώνει έναν-έναν κάθε χαρακτήρα, μέχρι να βρει μηδενικό χαρακτήρα. Μόλις τον βρει, τυπώνει μια αλλαγή γραμμής και επιστρέφει.

Για αυτό και στην τεκμηρίωσή της γράφει ότι το όρισμά της πρέπει να είναι string (και όχι χαρακτήρας). Όλες οι συναρτήσεις strings είναι φτιαγμένες έτσι ώστε να περιμένουν ως όρισμα ένα c-string.


Oποτε αλλη φορα πριν ρωτησω καλυτερα να διαβαζω την τεκμηριωση της εκαστοτε συνάρτησης.

Και η printf ετσι ειναι σαν την puts? Οταν της περνας το message σκετο αλλα με εναν μορφοποιητη %s .

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


char *ptr[]="Hello";

printf("%c", *ptr);

output -> H

printf("%s", ptr);

output-> Hello