Zakładając, że mam char* podstawy char*[]. Wiem, że w tablicy char* jest zerowy, a ostatni wpis jest null.

char* args[] = {"foo", "bar", NULL};

Jeśli rzucę to do char*, powinienem uzyskać adres początkowy "foo".

char* p = (char*)args;

Teraz chciałbym wypełnić wektor char*, tylko za pomocą zmiennej {X1}}. czy to możliwe?

Mój kod:

vector<char*> arguments;
bool null_terminated = true;
while(p!=NULL)
{
  if (null_terminated)
  {
    arguments.push_back((char *) p);
    null_terminated = false;
  }
  if ((*(char*)p) == '\0')
    null_terminated = true;
  p++;
}

Nie wydaje się to jednak pracować. Czy istnieje inne rozwiązanie?

-1
RandomUser70-1 23 październik 2020, 18:17

1 odpowiedź

Najlepsza odpowiedź

Myślę, że wypełnienie wektora char* p jest możliwe przy użyciu rzeczy jak reinterpret_cast, ale będzie to trudne, niebezpieczne, a nie gwarantowane. Nie zalecam tego.

Zamiast tego, aby wypełnić wektor z non-null elementami args, myślę, że powinieneś użyć wskaźnika do wskazywania elementów tablicy {x1}} i użyj, aby przemierzać tablicę.

Będzie to takie:

for(char** p = args; *p != NULL; p++) {
    arguments.push_back(*p);
}

Należy pamiętać, że p punkty w elementach i dewelowanej *p będą elementami.

1
MikeCAT 23 październik 2020, 15:36