Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 10 - ΧΑΡΑΚΤΗΡΕΣ ΚΑΙ ΣΥΜΒΟΛΟΣΕΙΡΕΣ - ΘΕΩΡΙΑ 2 από 2

Поделиться
HTML-код
  • Опубликовано: 16 ноя 2024

Комментарии • 24

  • @orestisstavropoulos6062
    @orestisstavropoulos6062 5 лет назад +32

    10:26 "και τσιμπάω λίγο το στρινγκ, με το συμπάθιο"😂😂

  • @koulis9377
    @koulis9377 4 года назад +14

    ΣΑΣ ΕΥΧΑΡΙΣΤΩ ΠΟΛΥ ΚΥΡΙΕ ΨΟΥΝΗ ΜΟΛΙΣ ΕΜΑΘΑ ΟΤΙ ΠΕΡΑΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΚΑΙ ΕΧΕΤΕ ΤΟΥΛΑΧΙΣΤΟΝ 85% ΑΝΑΜΕΙΞΗ ΣΕ ΑΥΤΗ ΤΗΝ «ΕΠΙΤΥΧΙΑ». ΠΑΜΕ ΓΙΑ C++

    • @psounis
      @psounis  4 года назад +16

      Αν και το προσδιόρισες με αξιοπρόσεκτη ακρίβεια, πιστεύω ότι η ανάμειξη μου είναι πολύ μικρότερη. Να είσαι καλά φίλε, πάντα επιτυχίες!

  • @jason63599
    @jason63599 Год назад +1

    κ. Ψούνη μας έχετε σώσει !

  • @EEffectStudio
    @EEffectStudio 7 лет назад +1

    Ευχαριστω Πολυ

  • @_nosma
    @_nosma 5 лет назад

    Όταν κάνω compile το πρόγραμμα με την gets o compiler το κάνει κανονικά compile αλλά μου δίνει αυτό το μήνυμα:
    /usr/bin/ld: /tmp/ccTTB3aA.o: in function `main':
    string2.c:(.text+0x35): warning: the `gets' function is dangerous and should not be used.
    Γιατί είναι dangerous? μήπως να μην την χρησιμοποιούμε και πάρα πολύ?
    Ακόμα μου προτείνει να χρησιμοποιώ την fgets. Τι εννοεί επικίνδυνη??? και γιάτι δεν πρέπει να τη χρησιμοποιούμε ??
    Ρωτάω γιατί είμαι και γω λίγο μίζερος :)

    • @psounis
      @psounis  5 лет назад +5

      Ναι υπάρχει ένα θέμα εδώ.
      Απ' ότι είδα, ο gcc εμφανίζει αυτό το μήνυμα λάθους, γιατί στο πρότυπο 11 και εξής, η gets καταργείται γιατί θεωρείται επικίνδυνη.
      Βέβαια, για λόγους συμβατότητας, θα διατηρηθεί η συνάρτηση για κάποιες δεκαετίες ακόμη και απλά θα πετά αυτό το αντιαισθητικό warning.
      Η επικινδυνότητά της συνίσταται στο ότι δεν έχει κάποιο όριο και μπορεί να συνεχίζει να διαβάζει από την είσοδο παρόλο που δεν υπάρχει κατάλληλος αποθηκευτικός χώρος (π.χ. να αποθηκεύσει συμβολοσειρά 1000b σε ένα μικρό buffer 10θ) και αυτό θεωρείται επικίνδυνο για κακόβουλη χρήση.
      Συνίσταται η χρήση της fgets πλέον, η οποία παίρνει ρητό όρισμα το πόσα bytes θα διαβάσει το πολύ.
      Περισσότερα εδώ:
      stackoverflow.com/questions/1694036/why-is-the-gets-function-so-dangerous-that-it-should-not-be-used
      Πάντως επί του πρακτέου, και μιας και αυτό το θέμα είναι αρκετά προχωρημένο, συνιστώ να συνεχίσεις κανονικά με την gets.
      Όταν με το καλό φτάσεις στο μάθημα 15, θα βρεις και την fgets και έτσι πλέον θα μπορείς να "ξεχάσεις" πια την gets και τα ψυχολογικά προβλήματά της.

    • @_nosma
      @_nosma 5 лет назад

      @@psounis Ναι, το έψαξα και εγώ λιγάκι εχθές, γιατί δεν περίμενα μέσα Αυγούστου απάντηση τόσο σύντομα, σας ευχαριστώ πολύ. Θα συνεχίσω κανονικά την ροή του μαθήματος όπως είναι με την gets, και βλέπουμε.(παρόλο που ο ψυχαναγκασμός βάρεσε λίγο κόκκινο αχαχαχ).

  • @ΣταύροςΓατέας-ε9λ
    @ΣταύροςΓατέας-ε9λ 3 года назад

    Οταν θελαμε να εμφανισουμε εναν πινακα με χρηση της printf,δε θυμαμαι απλα να διναμε σαν ορισμα μονο την ονομασια του πινακα, οποτε τωρα βαζοντας μονο το ονομα,που ξερει ο μεταγλωτιστης ποσα στοιχεια να εμφανισει?

    • @psounis
      @psounis  3 года назад

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

    • @ΣταύροςΓατέας-ε9λ
      @ΣταύροςΓατέας-ε9λ 3 года назад

      @@psounis ειναι απολυτα κατανοητο αυτο οκ, εγω μιλαω για το συντακτικο εμφανισης των συμβολοσειρων, μεχρι στιγμης οταν θελαμε να εμφανισουμε ολα τα στοιχεια ενος πινακα, καναμε διαπεραση ενα ενα τα στοιχεια μεσω ενος iindex και γινοταν η εμφανιση, τωρα γτ αρκει ξαφνικα μονο η ονομασια του πινακα και ο τροποσ με τον index δεν τρεχει? Για παραδειγμα,
      στον εξης κωδικα, η εμφανιση δε γινεται σωστα, αν ομως επροκειτο για string θα γινοταν σωστα,αυτο δεν καταλαβαινω:
      #include
      main()
      {
      int pinakas[15];
      printf ("%d",pinakas); /* αν ηταν string και εβαζα %s με την δηλωση char pinakas[15]; θα ετρεχε σωστα, και τα δυο ομως μονοδιαστατοι πινακες ειναι,αυτο δεν καταλαβαινω */
      } // μηπως ο λογος που το συντακτικο ειναι τετοιο στην περιπτωση αυτη, ειναι οτι ο compiler καταλαβαινει απο μονοςς του πού θα σταματησει λόγω του \0 ??
      Επισης μια τελευταια ερωτηση που εχω, ειναι για ποιον λογο αν δε γινει αρχικοποιηση μιας συμβολοσειρας, το .exe δε θα εμφανιζει τιποτα?Μηπως θα απαντηθουν καποιες απο τις ερωτησεις σε επομενα μαθηματα?

    • @psounis
      @psounis  3 года назад +1

      Ναι ισχύει αυτό που σκέφτηκες, ότι δηλαδή η printf καταλαβαίνει το τέλος της συμβολοσειράς με το \0, όπως θα το κάναμε και εμείς.
      Αν δε γίνει αρχικοποίηση της συμβολοσειράς, δεν ξέρουμε τη συμπεριφορά του προγράμματος. Ο δείκτης θα περιέχει σκουπίδια, που σημαίνει ότι μπορεί να σταματήσει αμέσως, μπορεί να τυπώσει μερικά περίεργα αποτελέσματα ή και να σκάσει το πρόγραμμα.

    • @ΣταύροςΓατέας-ε9λ
      @ΣταύροςΓατέας-ε9λ 3 года назад

      @@psounis οκ οποτε να υποθεσω οτι η εμφανιση μιας συμβολοσειρας μεσω index εχει "αποκλειστει" και δεν τρεχει για να ειμαστε αναγκασμενοι να το κανουμε ιο ευκολα, απλα με την ονομασια του πινακα σαν δευτερο ορισμα στην printf ?

    • @psounis
      @psounis  3 года назад +1

      @@ΣταύροςΓατέας-ε9λ Ακριβώς, είναι μία διευκόλυνση για εμάς αυτό το συντακτικό.
      Μπορείς πάντως να τυπώσεις τη συμβολοσειρά χαρακτήρα - χαρακτήρα κάπως έτσι:
      for (i=0; i

  • @ΧαράΠ-ε9γ
    @ΧαράΠ-ε9γ 7 лет назад

    Γεια σας! Ηθελα να ρωτησω με ποιο πληκτρο μαρκαρετε ολο τον κωδικα κατευθειαν? Για να τον κανετε αντιγραφη για παραδειγμα.

    • @psounis
      @psounis  7 лет назад +1

      ctrl+A επιλέγεις όλον τον κώδικα.

    • @ΧαράΠ-ε9γ
      @ΧαράΠ-ε9γ 7 лет назад

      Σας ευχαριστω!!

  • @am-xd8fn
    @am-xd8fn 7 лет назад

    πως μπορω σε καθε μια θεση να βαζω ενα ονομα ?

    • @psounis
      @psounis  7 лет назад

      Τι εννοείς;

  • @SteliosNtousios
    @SteliosNtousios 3 года назад

    Αν τρέξουμε αυτό, έχει πλάκα ότι η gets μαζεύει ό,τι παράτησε η scanf.
    #include
    main()
    {
    char string[80];

    printf("Dwse onoma kai epitheto: ");
    scanf("%s",string);
    printf("
    Onoma: %s",string);
    gets(string);
    printf("
    Epitheto: ");
    puts(string);
    }

    • @psounis
      @psounis  3 года назад

      Ισχύει. Όταν θα μελετήσουμε τις ροές (μαθήματα 16+) θα δούμε και γιατί συμβαίνει αυτό.