2012-04-08 8 views
0

Ich bin eine einfache Kommunikation zwischen den Buchsen tun und hier ist mein C++ CodePuffergröße geändert

while(1) 
{ 
    string buffer = "23,45\n"; 
    const char* foo = buffer.c_str(); 
    cout << "size of buffer is " << sizeof(buffer)<<endl; 
    send (s, foo, sizeof(buffer), 0); 
} 

seltsame Sache ist die Faust Iteration, die Größe des Puffers 5 wie erwartet, aber da die zweite Iteration und So, die Größe sprang dramatisch auf 32. irgendeine Idee warum? Vielen Dank. Übrigens kommt die zusätzliche Größe aus Leerzeichen.

+1

Warum verwenden Sie 'buffer.size()' nicht so, wie Sie 'string' verwenden sollten? – Griwes

+2

'sizeof (buffer)' gibt die Größe des 'buffer'-Objekts zurück, das nicht mit der Länge der enthaltenen Zeichenfolge übereinstimmt. –

+0

Schauen Sie hier >> http://www.cplusplus.com/forum/startner/24922/ –

Antwort

1

Der Operator sizeof gibt die Größe (in Byte) des Objekts zurück. Es nicht gibt die Länge eines Containertyps zurück. Sie müssen std::string::length() oder std::string::size() verwenden, um die Länge der Zeichenfolge zu bestimmen.

+0

Danke, hätte den Unterschied ohne den Hinweis nicht bemerkt. –

1

Ich denke, Sie haben die 5 der ersten Iteration missverstanden: es muss von woanders kommen. sizeof(buffer) wird zur Kompilierzeit herausgefunden - es ist die Größe von std::string, Sie sollten also 32 bei jeder Iteration sehen.

Wenn Sie nach der Länge der Zeichenfolge suchen, verwenden Sie stattdessen buffer.size().

0

sizeof(buffer) sagt Ihnen die Größe Ihres std::string Objekts, das nichts mit der Anzahl der Zeichen zu tun hat, die Sie darin speichern (übrigens 7 in Ihrem Beispiel, nicht 5).

+0

Die Länge des Strings ist "6", da das abschließende ''\ 0'' nicht gezählt wird. –

+0

@JoachimPileborg: Es gibt eine Möglichkeit zu sagen, es ist 6, ja, ich gebe dir das (für mich ist die * Puffer * Größe die Größe des Puffers, nicht die Länge der Zeichenfolge, die es enthält). Es ist jedoch keineswegs 5. – bitmask

Verwandte Themen