Arraygröße ermitteln von char **
-
Hallo zusammen,
ich habe da jetzt so ein kleines problemchen.
Ich habe so ein Array hier:
char ** myTest
Davon bräuchte ich jetzt die Größe. Wenn ich mit sizeof() arbeite, bekomme ich aber immer einen falschen Wert.
im Array stehen z.B. folgende Daten drin
myTest[0] ="IchBinEsUndDiesIstEInString"; myTest[1] ="JetztHabeIchHierMeinen2TestString";
-
MSS-Software schrieb:
Wenn ich mit sizeof() arbeite, bekomme ich aber immer einen falschen Wert.
nee, das ist schon der richtige (grösse des pointers bzw. das worauf er zeigt)
wenn du die gesamtlänge der strings haben willst:size_t total_len = strlen(myTest[0]) + 1 + strlen(myTest[1]) + 1;
und entsprechend verlängern, wenn es mehr strings werden (schleife).
-
char myTest[] = "Hallo"; [...] int size = sizeof(myTest) / sizeof(char);
size ist in dem beispiel dann 6 -> 5 buchstaben und abschließendes '\0'
-
ChrisJ schrieb:
char myTest[] = "Hallo";
DAS ist schonmal ein Array, hilft dem OP aber nix.
ChrisJ schrieb:
int size = sizeof(myTest) / sizeof(char);
Für Speichergrößen nimmt man nicht
int
sondernsize_t
(in den meisten Fällen ist das einunsigned long
).sizeof(char)
kannst dir in diesem Fall sparen, das gibt immer (per definition vonchar
) 1.MSS-Software schrieb:
Ich habe so ein Array hier:
char ** myTest
Das ist kein Array.
MSS-Software schrieb:
Wenn ich mit sizeof() arbeite, bekomme ich aber immer einen falschen Wert.
Undertaker schrieb:
[...] bzw. das worauf er zeigt)
Eben nicht.
Greetz, Swordfish
-
Swordfish schrieb:
Undertaker schrieb:
[...] bzw. das worauf er zeigt)
Eben nicht.
je nachdem, wie er's gemacht hat, sizeof(myTest), sizeof(*myTest) oder sizeof(**myTest).
-
naja, also ich muss eigentlich nicht wissen wie lang der string ist, sondern wie viele elemente ich habe.
und ein array ist es deswegen:
char * StringList[255];
meinen
char**
definiere ich in einer funktion als übergabeparameter wo dann hinterher das StringList Array übergeben wird
-
MSS-Software schrieb:
meinen
char**
definiere ich in einer funktion als übergabeparameter wo dann hinterher das StringList Array übergeben wird
Und da liegt das Problem: Das ist kein Array mehr. Dein char*[255] kann zwar in ein char** umgewandelt werden, dabei geht aber die Information [255] verloren. Du hast definitionsgemäß Einen Zeiger auf das erste Element eines Arrays, von dem jedes Element widerum ein Zeiger auf das erste Zeichen eines Strings ist. Die Information, dass dieser String maximal 255 Stellen lang sein darf, ist nicht mehr vorhanden. Diese Information musst Du entweder anders unterbringen (z.B. durch eine Adapterklasse oder einen Standardcontainer) oder der Funktion als Parameter übergeben. Bei der Übergabe kannst Du dann widerum auf die noch vorhandenen Infos zugreifen:
void my_func1(char** array, size_t arraySize); int main() { char *stringlist[255]; stringlist[0] = /* wasauchimmer */ malloc(10); my_func1(stringlist, sizeof(stringlist) / sizeof(*stringlist)); }
EDIT: Templatebeispiel und new gestrichen, wir sind ja hier im ANSI C Board
-
Du musst die Anzahl deiner Elemente selbst speichern.
Gruß