τι ακριβώς συμβαίνει όταν κάνω αυτή την εργασία

ψήφοι
0

Σκεφτείτε το εξής απόσπασμα

char a[]=;

Θα το NULLνα ανατεθεί -pointer με το δείκτη χαρακτήρα *a;

Αν όχι πώς μπορώ να ελέγξω ότι η δεν χορδών έχει ανατεθεί a;

Δημοσιεύθηκε 20/10/2018 στις 12:31
πηγή χρήστη
Σε άλλες γλώσσες...                            


4 απαντήσεις

ψήφοι
1

Θα πρέπει να ανατεθεί ένας δείκτης NULL για το δείκτη χαρακτήρα * α;

Δεν υπάρχει κανένας χαρακτήρας δείκτη εδώ, αλλά μια σειρά a από char.

aθα ορίζεται ως μια σειρά από charκαι αρχικοποιηθεί να κρατήσει ένα κενό-συμβολοσειρά, ότι είναι ένα c-string με ακριβώς φέρει το 0-terminator, η οποία είναι μία char.

πώς μπορώ να ελέγξω ότι η δεν χορδών έχει ανατεθεί σε ένα;

Έτσι, aθα έχουν ακριβώς ένα στοιχείο. Αυτό το στοιχείο συγκρίνει ίσο με '\0', το οποίο με τη σειρά του συγκρίνεται ίση με 0.

Για να ελέγξετε αυτή do

#include <stdio.h> /* for puts() */
#include <string.h> /* for strlen() */

int main(void)
{
  char a[] = ""; /* The same as: char a[1] = ""; */

  /* Possibility 1: */
  if (0 == a[0]) /* alternatively use '\0' == a[0] */
  {
    puts("a is an empty string.");
  }

  /* Possibility 2: */
  if (0 == strlen(a))
  {
    puts("a has length zero.");
  }
}
Απαντήθηκε 20/10/2018 στις 12:37
πηγή χρήστη

ψήφοι
0

==> Θα πρέπει να εκχωρηθεί ένα NULL δείκτη, με το δείκτη χαρακτήρα *a;

Οι πίνακες δεν είναι δείκτες.

Για την καλύτερη κατανόηση, ας αναφερθώ ένα παράδειγμα από C Πρότυπο # 6.7.9p32 [έμφαση δική μου]

ΠΑΡΑΔΕΙΓΜΑ 8 Η δήλωση

     char s[] = "abc", t[3] = "abc";

ορίζει «» απλό «» array char αντικείμενα s και tστοιχεία της οποίας είναι αρχικοποιείται με κατεξοχήν συμβολοσειρά χαρακτήρων. Η δήλωση αυτή είναι ταυτόσημη με

     char s[] = { 'a', 'b', 'c', '\0' },
           t[] = { 'a', 'b', 'c' };

Το περιεχόμενο των πινάκων είναι τροποποιήσιμοι. Από την άλλη πλευρά, η δήλωση

     char *p = "abc";

ορίζει pμε τύπο «» δείκτη προς χαρ «» και αρχικοποιεί αυτό το σημείο σε ένα αντικείμενο με τύπο «» συστοιχία char «» με μήκος 4 στοιχεία της οποίας είναι αρχικοποιείται με μια σειρά χαρακτήρων κυριολεκτική. Αν γίνει προσπάθεια να χρησιμοποιήσετε pγια να τροποποιήσει το περιεχόμενο του πίνακα, η συμπεριφορά είναι απροσδιόριστη.

Έτσι, αυτή η δήλωση

char a[]="";

ορίζει char συστοιχία αντικείμενο aτου οποίου τα στοιχεία αρχικοποιούνται με σειρά χαρακτήρων κυριολεκτική "". Σημειώστε ότι ""είναι ένα λεκτικό string που περιέχει ένα μοναδικό χαρακτήρα '\0'.
Η παραπάνω δήλωση είναι ισοδύναμη με

char a[] = {'\0'};

Αν παραλείψουμε τη διάσταση, compiler υπολογίζει για μας με βάση το μέγεθος του initializer (εδώ θα είναι 1επειδή initializer έχει μόνο ένα χαρακτήρα '\0'). Έτσι, η δήλωση είναι ίδια με

char a[1] = {'\0'};
Απαντήθηκε 20/10/2018 στις 16:20
πηγή χρήστη

ψήφοι
0

Πρώτα απ 'όλα, aδεν είναι ένας δείκτης χαρακτήρα, είναι μια σειρά από char. Υπάρχουν ορισμένες περιπτώσεις όπου η τελευταία αυτή μετατρέπεται σε πρώην, αλλά δεν είναι εγγενώς το ίδιο είδος.

Τούτου λεχθέντος, σε αυτή την προετοιμασία, σειρά aθα αρχίσει με ένα κενό string.

Κενό string σημαίνει, το πρώτο στοιχείο θα είναι η περάτωση null χαρακτήρα, έτσι ο ευκολότερος τρόπος για να ελέγξει εάν ένας πίνακας περιέχει μια κενή συμβολοσειρά είναι να συγκρίνουμε το πρώτο στοιχείο με null, όπως

 if (a[0] == '\0') {  /*do the action*/ }
Απαντήθηκε 20/10/2018 στις 12:33
πηγή χρήστη

ψήφοι
0

a θα περιέχουν 1 στοιχείο:

a[0] == '\0'

Σημείωση: aείναι δεν είναι ένας δείκτης.

Απαντήθηκε 20/10/2018 στις 12:33
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more