Περιγραφή

Οι συμβολοσειρές κειμένου μπορούν να εκπροσωπηθούν με δύο τρόπους. Έτσι μπορείτε είτε να χρησιμοποιήσετε τον τύπο δεδομένων της συμβολοσειράς, η οποία αποτελεί μέρος του πυρήνα από την έκδοση 0019, είτε μπορείτε να δημιουργήσετε μια συμβολοσειρά από έναν πίνακα χαρακτήρων και στην συνέχεια να τον τερματίσετε μηδενίζοντάς τον. Συγκεκριμένα εδώ περιγράφεται η δεύτερη μέθοδος. Για περισσότερες λεπτομέρειες σχετικά με το αντικείμενο της συμβολοσειράς, η οποία σας παρέχει μεγαλύτερη λειτουργικότητα με κόστος τον αποθηκευτικό χώρο, ανατρέξτε στην σελίδα String – object (αλφαριθμητικό αντικείμενο).

Παραδείγματα

Όλες οι παρακάτω δηλώσεις συμβολοσειρών είναι έγκυρες.

  char Str1[15];
  char Str2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'};
  char Str3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o', '\0'};
  char Str4[ ] = "arduino";
  char Str5[8] = "arduino";
  char Str6[15] = "arduino";

Δυνατότητες δηλώσεων συμβολοσειρών

  • Δήλωση ενός πίνακα χαρακτήρων, χωρίς να γίνει η αρχικοποίηση του όπως στο Str1.
  • Δήλωση ενός πίνακα χαρακτήρων με έναν επιπλέον χαρακτήρα, και στην συνέχεια ο μεταγλωττιστής θα προσθέσει τον απαιτούμενο μηδενικό χαρακτήρα όπως στο Str2.
  • Λεπτομερής προσθήκη του μηδενικού χαρακτήρα όπως στο Str3.
  • Αρχικοποίηση με μια σταθερά συμβολοσειράς μέσα σε εισαγωγικά. Σε αυτή την περίπτωση, ο μεταγλωττιστής θα προσπαθήσει να χωρέσει το μέγεθος του πίνακα, καθώς και τον μηδενικό χαρακτήρα τερματισμού στην σταθερά συμβολοσειράς όπως στο Str4.
  • Αρχικοποίηση του πίνακα με ένα ρητό μέγεθος και με μια σταθερά συμβολοσειράς όπως στο Str5.
  • Αρχικοποίηση του πίνακα, αφήνοντας παράλληλα επιπλέον χώρο για μια μεγαλύτερη συμβολοσειρά όπως στο Str6.

Μηδενικός τερματισμός

Σε γενικές γραμμές, οι συμβολοσειρές τερματίζονται με έναν κενό χαρακτήρα (κωδικός ASCII 0). Έτσι αυτό επιτρέπει σε συναρτήσεις όπως η Serial.print(), να προσδιορίσουν για το που ακριβώς τελειώνει μια συμβολοσειρά. Διαφορετικά, θα συνεχίσουν την ανάγνωση των επόμενων bytes της μνήμης, τα οποία στην πραγματικότητα δεν είναι μέρος της συμβολοσειράς.

Αυτό σημαίνει ότι η συμβολοσειρά σας πρέπει να έχει χώρο για έναν επιπλέον χαρακτήρα, από ότι το κείμενο στο οποίο θέλετε αυτή να συμπεριληφθεί. Αυτός είναι ο λόγος για τον οποίο το Str2 και το Str5 πρέπει να είναι οκτώ χαρακτήρες, ακόμα κι αν το “arduino” είναι μόλις επτά χαρακτήρες. Όμως η τελευταία θέση θα συμπληρωθεί αυτόματα με έναν κενό χαρακτήρα. Το Str4 θα λάβει αυτόματα το μέγεθος των οκτώ χαρακτήρων, λόγω του ενός επιπλέον κενού χαρακτήρα. Ενώ στο Str3, εμείς οι ίδιοι έχουμε συμπεριλάβει ρητά τον κενό χαρακτήρα γράφοντας το ‘\ 0’.

Σημειώστε ότι είναι δυνατόν να έχουμε μια συμβολοσειρά χωρίς τον τελικό κενό χαρακτήρα. Για παράδειγμα, εάν είχατε καθορίσει το μήκος του Str2 ως επτά αντί για οκτώ. Όμως αυτό θα χαλάσει τις περισσότερες συναρτήσεις που χρησιμοποιούν τις συμβολοσειρές. Συνεπώς δεν πρέπει να το κάνετε σκόπιμα. Εάν παρατηρήσετε κάτι να συμπεριφέρεται παράξενα, δηλαδή οι χειρισμοί να πραγματοποιούνται πάνω στους χαρακτήρες αντί στην συμβολοσειρά, ωστόσο, αυτό θα μπορούσε να είναι το πρόβλημα.

Μονά εισαγωγικά ή διπλά εισαγωγικά;

Οι συμβολοσειρές καθορίζονται πάντα μέσα σε διπλά εισαγωγικά (“Abc”), ενώ οι χαρακτήρες καθορίζονται πάντα μέσα σε μονά εισαγωγικά (‘A’).

Τυλίγοντας τις μακριές συμβολοσειρές

Μπορείτε να τυλίξετε τις μακριές συμβολοσειρές ως εξής:

char myString[] = "This is the first line"
" this is the second line"
" etcetera";

Πίνακες συμβολοσειρών

Είναι συχνά βολικό να δημιουργήσετε έναν πίνακα από συμβολοσειρές, όταν εργάζεστε με μεγάλες ποσότητες κειμένου, όπως μια εργασία με μια LCD οθόνη. Επειδή οι συμβολοσειρές από μόνες τους είναι πίνακες, αυτό στην πραγματικότητα είναι ένα παράδειγμα ενός δισδιάστατου πίνακα.

Στον παρακάτω κώδικα, ο αστερίσκος μετά από τον τύπο δεδομένων του χαρακτήρα, “char *” υποδηλώνει ότι πρόκειται για έναν πίνακα από “δείκτες”. Στην πραγματικότητα, όλα τα ονόματα των πινάκων είναι δείκτες. Έτσι οι δείκτες απαιτούνται για την δημιουργία μιας σειράς από πίνακες. Οι δείκτες για τους αρχάριους, αποτελούν το δυσκολότερο μέρος της γλώσσας C που πρέπει να καταλάβουν. Όμως δεν είναι απαραίτητο να κατανοήσουν λεπτομερώς τους δείκτες, έτσι ώστε να τους χρησιμοποιούν αποτελεσματικά εδώ.

Παράδειγμα

char* myStrings[]={"This is string 1", "This is string 2", "This is string 3",
"This is string 4", "This is string 5","This is string 6"};

void setup(){
Serial.begin(9600);
}

void loop(){
for (int i = 0; i < 6; i++){
   Serial.println(myStrings[i]);
   delay(500);
   }
}

Επιστροφή στην σελίδα Παραπομπές Γλώσσας