C -> sizeof string ist immer 8
#include "usefunc.h" //don't worry about this -> lib I wrote
int main()
{
int i;
string given[4000], longest = "a"; //declared new typdef. equivalent to 2D char array
given[0] = "a";
printf("Please enter words separated by RETs...\n");
for (i = 1; i < 4000 && !StringEqual(given[i-1], "end"); i++)
{
given[i] = GetLine();
/*
if (sizeof(given[i]) > sizeof(longest))
{
longest = given[i];
}
*/
printf("%lu\n", sizeof(given[i])); //this ALWAYS RETURNS EIGHT!!!
}
printf("%s", longest);
}
Warum kommt es immer wieder 8???
- Wenn
string
ein typedef fürchar*
? - typedef, entschuldigen Sie mich. C
- Was ist
string
? - Sie haben andere Probleme hier. Der code fehlerhaft ist, mit einem unsyntactic for-Anweisung und eine unübertroffene */, und es ist nicht klar, was ich in deinem printf-Anweisung.
- was ist das...es hat nicht richtig einfügen
sizeof
zurücksize_t
welche ausgedruckt werden muss mit%zu
, nicht%lu
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keine
string
Datentyp in C Ist das C++? Oder iststring
ein typedef?Vorausgesetzt
string
ist ein typedef fürchar *
, was Sie wahrscheinlich wollen, iststrlen
, nichtsizeof
. Die 8, dass Sie immer mitsizeof
ist eigentlich die Größe der Zeiger (auf das erste Zeichen im string).string
dann, weil es nicht einchar *
.Es ist und behandeln Sie es als ein Zeiger, sizeof Zeiger ist offensichtlich 8bytes = 64 bits, die auf Ihrem Computer
Sagen Sie: "Mach dir keine sorgen machen -> lib, die ich schrieb," aber das ist das kritische Stück von Informationen, wie es definiert string. Vermutlich Zeichenkette ist char* und die Größe des auf Ihrem Rechner ist 8. So, sizeof(gegeben[i]) 8 gegeben, weil [i] ist ein string. Vielleicht möchten Sie strlen, anstatt sizeof.
Dies ist Häufig der Fehler zwischen der Reihe der Zeichen selbst, und der Zeiger, wo das array anfängt.
Beispielsweise die C-Stil-string-literal:
Ist 14 bytes (13 für die Nachricht, und 1 für das null-Endzeichen).
Sie können
sizeof()
bestimmen die Größe einer raw-C-Stil-string.Jedoch, wenn wir einen Zeiger auf die Zeichenkette:
Und versuchen, es zu finden ' s Größe mit
sizeof()
, es wird nur immer wieder die Größe eines Daten-pointer auf Ihrem system.So, in anderen Worten, wenn Sie versuchen, um die Größe der string aus einem string-Bibliothek, Sie sind wirklich nur immer die Größe der Zeiger auf den Beginn der Zeichenfolge. Was Sie brauchen, um zu verwenden ist der
strlen()
Funktion gibt die Größe des Strings in Zeichen:Hoffe, das klärt die Sache!