C ++ vsnprintf () - Βασική βιβλιοθήκη C ++

Η συνάρτηση vsnprintf () στο C ++ χρησιμοποιείται για την εγγραφή μιας μορφοποιημένης συμβολοσειράς σε ένα buffer συμβολοσειρών.

Σε αντίθεση με το vsprintf (), ο μέγιστος αριθμός χαρακτήρων που μπορούν να γραφτούν στο buffer καθορίζεται στο vsnprintf().

πρωτότυπο vsnprintf ()

 int vsnprintf (char * buffer, size_t buf_size, const char * format, va_list vlist);

Η vsnprintf()συνάρτηση γράφει τη συμβολοσειρά που δείχνει με μορφή σε ένα buffer συμβολοσειράς χαρακτήρων. Ο μέγιστος αριθμός χαρακτήρων που μπορούν να γραφτούν είναι buf_size. Μετά τη σύνταξη των χαρακτήρων, προστίθεται ένας τελικός μηδενικός χαρακτήρας. Εάν το buf_size είναι μηδέν, τίποτα δεν γράφεται και το buffer μπορεί να είναι μηδενικός δείκτης.

Η μορφή συμβολοσειράς μπορεί να περιέχει προσδιοριστές μορφής ξεκινώντας από% που αντικαθίστανται από τις τιμές των μεταβλητών που μεταβιβάζονται ως λίστα λίστας.

Ορίζεται στο αρχείο κεφαλίδας.

Παράμετροι vsnprintf ()

  • buffer: Δείκτης σε μια συμβολοσειρά χαρακτήρων για να γράψει το αποτέλεσμα.
  • buf_size: Μέγιστος αριθμός χαρακτήρων για εγγραφή.
  • μορφή: Δείκτης σε μηδενική τερματική συμβολοσειρά που είναι γραμμένη στη ροή αρχείων. Αποτελείται από χαρακτήρες μαζί με προαιρετικούς προσδιοριστές μορφής ξεκινώντας από%.

    Οι προσδιοριστές μορφής αντικαθίστανται από τις τιμές των αντίστοιχων μεταβλητών που ακολουθούν τη συμβολοσειρά μορφής.

    Ο προσδιοριστής μορφής έχει τα ακόλουθα μέρη:

    • Ένα κορυφαίο σύμβολο%
    • Σημαίες: Προαιρετική μία ή περισσότερες σημαίες που τροποποιούν τη συμπεριφορά μετατροπής.
      • -: Αριστερά αιτιολογήστε το αποτέλεσμα στο πεδίο. Από προεπιλογή, δικαιολογείται σωστά.
      • +: Το σύμβολο του αποτελέσματος επισυνάπτεται στην αρχή της τιμής, ακόμη και για θετικά αποτελέσματα.
      • Space: Εάν δεν υπάρχει σημάδι, ένα κενό είναι προσαρτημένο στην αρχή του αποτελέσματος.
      • #: Εκτελείται μια εναλλακτική μορφή μετατροπής.
      • 0: Χρησιμοποιείται για ακέραιο και κυμαινόμενο αριθμό. Τα κορυφαία μηδενικά χρησιμοποιούνται για να γεμίσουν τους αριθμούς αντί για κενό.
    • Πλάτος: Μια προαιρετική * ή ακέραια τιμή που χρησιμοποιείται για τον καθορισμό του πεδίου ελάχιστου πλάτους.
    • Ακρίβεια: Ένα προαιρετικό πεδίο που αποτελείται από ακολουθούμενο από * ή ακέραιο ή τίποτα για να καθορίσετε την ακρίβεια.
    • Μήκος: Ένας προαιρετικός τροποποιητής μήκους που καθορίζει το μέγεθος του ορίσματος.
    • Καθορισμός: Ένας προσδιοριστής μορφής μετατροπής. Οι διαθέσιμοι προσδιοριστές μορφής είναι οι εξής:
      Προσδιοριστής μορφής Περιγραφή
      % Εκτυπώσεις%
      ντο Γράφει έναν μόνο χαρακτήρα
      μικρό Γράφει μια συμβολοσειρά χαρακτήρων
      δ ή ι Μετατρέπει έναν υπογεγραμμένο ακέραιο σε δεκαδική αναπαράσταση
      ο Μετατρέπει έναν μη υπογεγραμμένο ακέραιο σε οκταδική αναπαράσταση
      X ή x Μετατρέπει έναν μη υπογεγραμμένο ακέραιο σε δεκαεξαδική αναπαράσταση
      εσύ Μετατρέπει έναν μη υπογεγραμμένο ακέραιο σε δεκαδική αναπαράσταση
      F ή f Μετατρέπει τον αριθμό κυμαινόμενου σημείου στην δεκαδική αναπαράσταση
      Ε ή ε Μετατρέπει τον αριθμό κυμαινόμενου σημείου στην υποδιαστολή του δεκαδικού εκθετικού
      Α ή α Μετατρέπει τον αριθμό κυμαινόμενου σημείου στον δεκαεξαδικό εκθέτη
      G ή g Μετατρέπει τον αριθμό κυμαινόμενου σημείου σε δεκαδικό ή δεκαδικό εκθετικό συμβολισμό
      ν Επιστρέφει τον αριθμό των χαρακτήρων που έχουν γραφτεί μέχρι στιγμής από αυτήν την κλήση στη συνάρτηση. Το αποτέλεσμα γράφεται στην τιμή που δείχνει το όρισμα
      Π Γράφει μια ακολουθία χαρακτήρων που καθορίζεται από την εφαρμογή και καθορίζει έναν δείκτη.

      Έτσι, η γενική μορφή του προσδιοριστή μορφής είναι: %(flags)(width)(.precision)(length)specifier

  • vlist: Μια λίστα με ορίσματα που περιέχουν τα δεδομένα για εγγραφή.

vsnprintf () Επιστροφή τιμή

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

Παράδειγμα: Πώς λειτουργεί η συνάρτηση vsnprintf ()

 #include #include void write(char* buf, int buf_size, const char *fmt,… ) ( va_list args; va_start(args, fmt); vsnprintf(buf, buf_size, fmt, args); va_end(args); ) int main () ( char buffer(100); char fname(20) = "Bjarne"; char lname(20) = "Stroustrup"; char lang(5) = "C++"; write(buffer, 27, "%s was created by %s %s", lang, fname, lname); printf("%s", buffer); return 0; )

Όταν εκτελείτε το πρόγραμμα, η έξοδος θα είναι:

 Το C ++ δημιουργήθηκε από τον Bjarne 

ενδιαφέροντα άρθρα...