was genau passiert, wenn ich diese Aufgabe zu tun

stimmen
0

Betrachten Sie diesen Code-Schnipsel

char a[]=;

Wird ein NULL-Zeiger auf der einen Zeichenzeiger zugeordnet werden *a?

Wenn nicht , wie kann ich überprüfen , dass die keine Zeichenfolge zugewiesen wurde a?

Veröffentlicht am 20/10/2018 um 12:31
quelle vom benutzer
In anderen Sprachen...                            


4 antworten

stimmen
1

Wird ein NULL-Zeiger auf der einen Zeichenzeiger zugeordnet werden * a?

Es gibt kein Zeichen Zeiger hier, sondern eine Reihe a von char.

awird als ein Array von definiert werden charund initialisiert einen leeren-string zu halten, das ist eine C-Zeichenfolge mit nur dem Buch 0-terminator, welche ist char.

Wie kann ich überprüfen, dass die keine Zeichenfolge ein zugewiesen wurde?

So awird genau ein Element. Dieses Element vergleicht gleich '\0', was wiederum vergleicht gleich 0.

Um zu testen, dies zu tun

#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.");
  }
}
Beantwortet am 20/10/2018 um 12:37
quelle vom benutzer

stimmen
0

==> Wird ein NULL-Zeiger auf der einen Zeichenzeiger zugeordnet werden *a?

Arrays sind keine Zeiger.

Zum besseren Verständnis können ein Beispiel aus C Standard # 6.7.9p32 siehe [Hervorhebung von mir]

Beispiel 8 Die Erklärung

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

definiert ‚‘ Plain ‚‘ char Array - Objekte s und tderen Elemente mit Zeichenfolge Literale initialisiert. Diese Erklärung ist identisch mit

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

Die Inhalte der Arrays sind modifizierbar. Auf der anderen Seite, die Erklärung

     char *p = "abc";

definiert , pmit Typ ‚‘ Zeiger auf char ‚‘ und initialisiert sie auf ein Objekt mit Typ ‚‘ Array von char ‚‘ mit der Länge 4 , deren Elemente mit einem Zeichenkettenliteral initialisiert zu zeigen. Wenn versucht wird , verwenden , um pden Inhalt des Arrays zu ändern, wird das Verhalten nicht definiert.

Also, diese Aussage

char a[]="";

definiert char Array Objekt , adessen Elemente mit literal Zeichenfolge initialisiert "". Beachten Sie, dass ""ein Stringliteral ein einzelnes Zeichen enthält '\0'.
Die obige Aussage entspricht

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

Wenn wir die Dimension auslassen, Compiler berechnet es für uns auf der Grundlage der Größe des initializer (hier wird es sein , 1weil initializer nur einen Charakter '\0'). So ist die Aussage gleich wie

char a[1] = {'\0'};
Beantwortet am 20/10/2018 um 16:20
quelle vom benutzer

stimmen
0

Zunächst einmal aist kein Zeichenzeiger, es ist ein Array aus char. Es gibt einige Fälle , in denen diese in dem ehemaligen umgewandelt werden, aber sie sind von Natur aus nicht vom gleichen Typ.

Wie gesagt, in dieser Initialisierung Array awird mit einer leeren Zeichenfolge initialisiert werden.

Leere Zeichenkette bedeutet, das erste Element wird das Null-Zeichen beendet sein, so dass der einfachste Weg, um zu überprüfen, ob ein Array enthält eine leere Zeichenfolge ist das erste Element mit null zu vergleichen, wie

 if (a[0] == '\0') {  /*do the action*/ }
Beantwortet am 20/10/2018 um 12:33
quelle vom benutzer

stimmen
0

a enthält 1 Element:

a[0] == '\0'

Hinweis: aist nicht ein Zeiger.

Beantwortet am 20/10/2018 um 12:33
quelle vom benutzer

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