ist ein Zeiger-Wert:
tempstr
Dies ist ein weiterer Zeigerwert (der auf 5
Elemente jenseits des tempstr
Zeigerwert):
tempstr + 5
Dies ist eine ganze Zahl:
strlen(line)
Daher ist dies ein Zeigerwert (der auf strlen(line)
Elemente jenseits derzeigtZeigerwert):
tempstr + strlen(line)
Und das dereferencing diesen Zeiger:
*(tempstr + strlen(line))
Das ist, was ich denke, dann richtig, wenn ich falsch bin. * (tempstr + strlen (line)) fügt die Länge der Zeile zu tempstr und Dereferenzierung und die Zuordnung der 0x0 konvertiert zu einem char?
Es wird sichergestellt, dass der Charakter bei Index 20 von tempstr unmittelbar jenseits der „AUTO_ANSWER_CALL = 1“ Zeichen, null ist: das heißt, es ist sichergestellt, dass die Zeichenfolge nullterminierte ist.
Dieser String ist übrigens bereits null-terminiert (so dass die letzte Anweisung redudent ist): weil strcpy die Zeichenkette einschließlich des impliziten Null-Beendigungszeichens kopiert.
Ist das nicht einfacher, nur die folgende tempstr zu tun [sizeof (tempstr) -1] = '\ 0'; das ist viel einfacher zu verstehen.
Dies sind nicht die gleiche Sache: strlen(line)
20 ist gleich, aber sizeof(tempstr)
gleich 128.
würde diese Arbeit: tempstr [strlen (tempstr)] = '\ 0'
das ist genau die gleichen Dinge wie:
*(tempstr + strlen(tempstr)) = '\0'
Nur eine andere Art, es zu schreiben.
Wenn tempstr jedoch keine nullterminierte Zeichenfolge ist, wäre die Länge ebenfalls 128.
Wenn tempstr ist kein Null-terminierten String dann strlen(tempstr)
nicht definiert ist (‚undefined‘ bedeutet, dass es sinnlos und gefährlich, um einen Fehler, und sollte nicht verwendet werden): die strlen
Funktion außer nicht gültig ist, wenn es Wird für eine Zeichenfolge verwendet, die bereits nullterminiert ist.
würde dies funktionieren: tempstr [strlen (tempstr)] = '\ 0'; Wenn tempstr jedoch NICHT eine nullterminierte Zeichenfolge ist, wäre die Länge ebenfalls 128. Weil ich die Länge einer unbestimmten Länge bekomme? Vielen Dank. – ant2009
an meine Antwort angehängt – ChrisW