Font
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]11116[/thread]

Länge eines Char-Vektors

Readers: 7


<< >> 7 entries, 1 page
pktm
 2008-01-09 13:59
#104536 #104536
User since
2003-08-07
2921 articles
BenutzerIn
[Homepage]
user image
Hallo!

Wie komme ich an die Länge eines Char-Vektors?
Den bekomme ich bei einer Methode als Parameter:
Code: (dl )
1
2
3
4
void blubb( char cv1[] )
{
// hier die länge auslesen...
}


Die STL soll nicht benutzt werden.
Ich dachte, es gäbe eventuell eine .length() - Methode, aber das entsprechende Experiment ergab die Fehlermeldung
Quote
1>...string.hpp(51) : error C2228: Links von ".length" muss sich eine Klasse/Struktur/Union befinden.
1> Typ ist 'char []'


Wer weis Rat?

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
nepos
 2008-01-09 14:54
#104538 #104538
User since
2005-08-17
1420 articles
BenutzerIn
[Homepage] [default_avatar]
Wenn der Char-Vektor ein String ist, muss das letzte Zeichen doch ein Null-Byte sein. Das könntest du mittels einer Schleife suchen.
Oder bin ich da grade ganz falsch?
GwenDragon
 2008-01-09 16:50
#104545 #104545
User since
2005-01-17
14749 articles
Admin1
[Homepage]
user image
Ähm,
Größe: sizeof
oder falls es ein C-String mit \0 am Ende ist:
strlen
murphy
 2008-01-10 05:04
#104565 #104565
User since
2004-07-19
1776 articles
HausmeisterIn
[Homepage]
user image
GwenDragon+2008-01-09 15:50:59--
[...]
Größe: sizeof
[...]


Vorsicht! sizeof liefert vermutlich nicht das, was hier gesucht wurde.

Im Falle dieses Codes
Code: (dl )
1
2
3
size_t getSizeOf(char data[]) {
return sizeof(data);
}

ist unter C / C++ der Rückgabewert garantiert immer gleich, und zwar die Größe des Zeigers, der als Parameter übergeben wird; das ist in der Regel ein Maschinenwort von 4 oder 8 Bytes.

Dasselbe gilt natürlich auch für den äquivalenten Code
Code: (dl )
1
2
3
size_t getSizeOf(char *data) {
return sizeof(data);
}


Selbst im Falle dieses Codes
Code: (dl )
1
2
3
size_t getSizeOf(char data[42]) {
return sizeof(data);
}

sollte der Rückgabewert noch stets derselbe wie beim obigen sein.

Anders sieht es mit
Code: (dl )
1
2
3
4
size_t getSizeOf(void) {
char data[42];
return sizeof(data);
}

aus. Hier sollte stets 42 * sizeof(char) herauskommen.

Langer Rede kurzer Sinn: C / C++ speichert im Datentyp "Array" keinerlei Längeninformation und übergibt ihn als Parameter in der Regel per Referenz. Mit sizeof kann nur dann die Länge eines Arrays bestimmt werden, wenn diese zur Kompilierzeit bekannt ist. Für alle anderen Fälle muss man die Längeninformation entweder durch Scannen (wie beispielsweise mit strlen) ermitteln, oder in einer separaten Variable / einem Feld einer Struktur mitführen.
When C++ is your hammer, every problem looks like your thumb.
esskar
 2008-03-09 10:22
#106848 #106848
User since
2003-08-04
7321 articles
ModeratorIn

user image
und ansonsten hast du keine chance...
linse
 2008-03-09 14:43
#106849 #106849
User since
2006-02-02
61 articles
BenutzerIn
[Homepage]
user image
Oder bin ich da grade ganz falsch?
Ne deswegen muss man bei nen pointer den typ angeben.
char data[] ="test text";
char pointer = *data;
getSizeOf(&pointer);

int getSizeOf(char *data) {
int size;
while(*data){
size++;
data++;
}
return size;
}
esskar
 2008-03-09 15:38
#106851 #106851
User since
2003-08-04
7321 articles
ModeratorIn

user image
in deinem fall stimmt dass, aber lass mal deinen code auf folgendes los

[cpp]
char data[16] = { '\0', 't', 'e', 's', 't' };
[/cpp]

btw. dein code macht nix anderes als

[cpp]strlen[/cpp] ;)
<< >> 7 entries, 1 page



View all threads created 2008-01-09 13:59.