Εμφάνιση 1-8 από 8
  1. #1
    Εγγραφή
    13-09-2016
    Μηνύματα
    24
    Downloads
    0
    Uploads
    0
    ISP
    ΟΤΕ Conn-x
    ΓΛΩΣΣΑ C
    Χρησιμοποιήσα την strncpy για να αντιγράψω ένα αλφαριθμητικό σε έναν δισδιάστατο πίνακα και βγάζει warning:"passing arguement 1 οφ 'strncpy' from incompatible pointer type" και note:"expected 'char*' but arguement type is 'char(*)[(sizetype)(SIZE)]'

    Επίσης μετά την εκτύπωση του αλφαριθμητικού crashaρει.
    Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  1.PNG 
Εμφανίσεις:  21 
Μέγεθος:  49,3 KB 
ID: 199479Πατήστε στην εικόνα για να τη δείτε σε μεγέθυνση. 

Όνομα:  2.PNG 
Εμφανίσεις:  8 
Μέγεθος:  37,0 KB 
ID: 199480

  2. #2
    Εγγραφή
    13-11-2011
    Περιοχή
    Χολαργός
    Ηλικία
    37
    Μηνύματα
    1.438
    Downloads
    1
    Uploads
    0
    Τύπος
    VDSL2
    Ταχύτητα
    24000 / 4500
    ISP
    Wind
    DSLAM
    Wind - ΧΟΛΑΡΓΟΣ
    Path Level
    Interleaved
    Στη C δεν μπορείς να φτιάξεις ένα πίνακα με μέγεθος που δεν είναι γνωστό κατά τη μεταγλώττιση χωρίς να δεσμεύσεις μόνος σου μνήμη.
    Τα ακόλουθα κομμάτια είναι εντελώς διαφορετικά μεταξύ τους:

    Κώδικας:
    int SIZE;
    SIZE = 5;
    char array[SIZE];
    Κώδικας:
    #define SIZE 5;
    char array[SIZE];
    Στην πρώτη περίπτωση είναι λάθος γιατί κατά τη μεταγλώττιση δεν γνωρίζουμε το μέγεθος του SIZE, ενώ στην δεύτερη περίπτωση είναι μεταβλητή του preprocessor, οπότε τη γνωρίζουμε.

    Για na φτιάξεις πίνακες που δεν γνωρίζεις το μέγεθος κατά τη μεταγλώττιση πρέπει να χρησιμοποιήσεις τη malloc και να δεσμεύσεις δυναμικά τη μνήμη που θέλεις για τον πίνακά σου.

    Γενικά δες για τους pointers και τη malloc-free

  3. #3
    Εγγραφή
    13-09-2016
    Μηνύματα
    24
    Downloads
    0
    Uploads
    0
    ISP
    ΟΤΕ Conn-x
    την SIZE και την N πρέπει να τις δίνει ο χρήστης υποχρεωτικά σύμφωνα με τις οδηγίες που έχω,άρα δεν μπορώ μόνος μου να τους εκχωρήσω τιμές

  4. #4
    Εγγραφή
    13-11-2011
    Περιοχή
    Χολαργός
    Ηλικία
    37
    Μηνύματα
    1.438
    Downloads
    1
    Uploads
    0
    Τύπος
    VDSL2
    Ταχύτητα
    24000 / 4500
    ISP
    Wind
    DSLAM
    Wind - ΧΟΛΑΡΓΟΣ
    Path Level
    Interleaved
    Για αυτό σου είπα για τη malloc και τους pointers...

  5. #5
    Εγγραφή
    13-09-2016
    Μηνύματα
    24
    Downloads
    0
    Uploads
    0
    ISP
    ΟΤΕ Conn-x
    αδερφέ σου έστειλα προσωπικό μύνημα

  6. #6
    Εγγραφή
    05-10-2004
    Περιοχή
    Santa Clara, CA, USA
    Ηλικία
    38
    Μηνύματα
    1.307
    Downloads
    9
    Uploads
    0
    Τύπος
    Cable
    Ταχύτητα
    200/5 Mbps
    ISP
    Comcast
    Router
    Netgear C7000v2
    Εάν χρησιμοποιείς C99 τότε μπορείς να έχεις VLAs, δεν χρειάζεται να δημιουργείς τους πίνακες με malloc. Δεν μας λες ποιον compiler χρησιμοποιείς και αν κάνεις μεταγλώττιση σύμφωνα με το C99 standard, αλλά αν ισχύει αυτό τότε μια χαρά είναι οι δηλώσεις των πινάκων έτσι όπως τις έχεις.

    Το πρόβλημα είναι στην
    Κώδικας:
    strncpy(pin, str, SIZE);
    . Τη συμβολοσειρά που έχεις αποθηκεύσει στη μεταβλητή str προσπαθείς να την αντιγράψεις που; Η pin δεν είναι συμβολοσειρά, είναι πίνακας με συμβολοσειρές. Άρα την str πρέπει να την αντιγράψεις στην pin[i], όπου i είναι ένα νούμερο από 0 έως N-1. Επίσης, στην τελευταία printf λες ότι θέλεις να εκτυπώσεις μια συμβολοσειρά (αυτό σημαίνει ο modifier "%s"), αλλά μετά ως όρισμα δίνεις το pin[i][j] το οποίο δεν είναι συμβολοσειρά, αλλά ένας χαρακτήρας μιας συμβολοσειράς (είναι ο j-οστός χαρακτήρας της i-οστής συμβολοσειράς).

    Μετά από αυτά που σου είπα, δοκίμασε να ξαναγράψεις τον κώδικά σου πιο σωστά και πες μας πώς πάει.

  7. #7
    Εγγραφή
    02-11-2003
    Περιοχή
    Επαναπατρισθείς στην Αθήνα
    Ηλικία
    49
    Μηνύματα
    56.427
    Downloads
    64
    Uploads
    73
    Τύπος
    VDSL2
    Ταχύτητα
    102400/10240
    ISP
    Vodafone
    Path Level
    Fastpath
    Ακόμα καλύτερα η calloc αντί της malloc, η οποία επιπλέον μηδενίζει (καθαρίζει) την μνήμη πριν στην δώσει.
    Επιτέλους το ελάχιστο δυνατό, ευέλικτο, και ψηφιακό κράτος. Με διαρκή αξιολόγηση.

  8. #8
    Εγγραφή
    12-02-2005
    Περιοχή
    ΚΑΤΕΡΙΝΗ
    Ηλικία
    49
    Μηνύματα
    2.674
    Downloads
    9
    Uploads
    0
    Τύπος
    VDSL2
    Ταχύτητα
    89836/10996
    ISP
    Forthnet
    DSLAM
    Forthnet - ΚΑΤΕΡΙΝΗ
    Router
    ZTE H288A
    SNR / Attn
    9.7(dB) / 6.1(dB)
    Path Level
    Interleaved
    Θα σου έλεγα να ρίξεις μια ματιά εδώ: https://www.youtube.com/channel/UC_N...LEY490wrUyXbKg

    Σίγουρα σε ενδιαφέρει το 8,10,12 μάθημα.

    Όσον αφορά το αλφαριθμητικό, πάντα θα πρέπει να δεσμεύεις μια θέση παραπάνω από το πλήθος των χαρακτήρων που θέλεις να αποθηκεύσεις, αφού ως γνωστό στην c μια συμβολοσειρά πάντα έχει και στο τέλος και τον χαρακτήρα τερματισμού \0
    Τα όνειρα που κάνω από τα 20 παρκάρουν στον ακάλυπτο νωρίς. Μα εσύ που με κοιτάς σαν λύτρωση ζωή παρκαρισμένη μην δεχτείς.

Παρόμοια Θέματα

  1. αντιγραφή πολλών workbooks σε ένα
    Από xaris2335 στο φόρουμ Software γενικά
    Μηνύματα: 2
    Τελευταίο Μήνυμα: 22-10-18, 08:53
  2. Μηνύματα: 1
    Τελευταίο Μήνυμα: 14-09-18, 20:31
  3. Μηνύματα: 16
    Τελευταίο Μήνυμα: 29-05-18, 18:07
  4. Μηνύματα: 140
    Τελευταίο Μήνυμα: 21-12-17, 16:53

Bookmarks

Bookmarks

Δικαιώματα - Επιλογές

  • Δεν μπορείτε να δημοσιεύσετε νέα θέματα
  • Δεν μπορείτε να δημοσιεύσετε νέα μηνύματα
  • Δεν μπορείτε να αναρτήσετε συνημμένα
  • Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας
  •  
  • Τα BB code είναι σε λειτουργία
  • Τα Smilies είναι σε λειτουργία
  • Το [IMG] είναι σε λειτουργία
  • Το [VIDEO] είναι σε λειτουργία
  • Το HTML είναι εκτός λειτουργίας