const char* p = "I\0had\0a\0little\0lamb\0";
const char* arr[5];
arr[0] = p; // "I"
arr[1] = arr[0] + strlen(arr[0]) + 1; // "had"
arr[2] = arr[1] + strlen(arr[1]) + 1; // "a"
arr[3] = arr[2] + strlen(arr[2]) + 1; // "little"
arr[4] = arr[3] + strlen(arr[3]) + 1; // "lamb"
, die für kleine Saiten in Ordnung. Aber wenn Sie versuchen, diese zur Laufzeit dynamisch zu tun, vor allem, wenn Sie nicht wissen, wie viele Teil Sie gehen mit zu tun haben, dann verwenden Sie etwas mehr wie folgt statt:
#include <vector>
const char* p = "I\0had\0a\0little\0lamb\0";
std::vector<char*> vec;
while (*p)
{
vec.push_back(const_cast<char*>(p));
p += (strlen(p) + 1);
}
// vec[0] = "I"
// vec[1] = "had"
// vec[2] = "a"
// vec[3] = "little"
// vec[4] = "lamb"
aber sagen, dass basierend auf Ihre in den Kommentaren angegebene Anforderung:
Gegeben ein Zeiger p auf das erste Element in einem Zeichenarray, das n Zeichenfolgen enthält (jeweils mit '\ 0' abgeschlossen), ein dynamisch zugeordnetes Array der Startadressen aller n zurückgeben Zeichenketten
Sie brauchen etwas mehr wie folgt aus:
const char** stara(const char* str)
{
const char* p = str;
int n = 0;
while (*p)
{
++n;
p += (strlen(p) + 1);
}
const char* *arr = new const char*[n+1];
p = str;
n = 0;
while (*p)
{
arr[n++] = p;
p += (strlen(p) + 1);
}
arr[n] = NULL;
return arr;
}
const char* *arr = stara("I\0had\0a\0little\0lamb\0");
// arr[0] = "I"
// arr[1] = "had"
// arr[2] = "a"
// arr[3] = "little"
// arr[4] = "lamb"
// arr[5] = NULL
delete[] arr;
Live demo
ein Vektor von Zeigern - und ich sehe nicht, was Ihre Frage (soweit ich es aus machen kann) hat mit dynamischer Speicherzuweisung zu tun. –
ich weiß, dass ich Zeiger erstellen muss, können Sie mir helfen, mehr, ich bin ein Anfänger –