Zum Beispiel, ich habe diesenErhalten Sie einen Teil eines char *
char *buff = "this is a test string";
und will "test"
zu bekommen. Wie kann ich das machen?
Zum Beispiel, ich habe diesenErhalten Sie einen Teil eines char *
char *buff = "this is a test string";
und will "test"
zu bekommen. Wie kann ich das machen?
char subbuff[5];
memcpy(subbuff, &buff[10], 4);
subbuff[4] = '\0';
Job :) getan
Angenommen, Sie die Position und die Länge des Teils wissen:
char *buff = "this is a test string";
printf("%.*s", 4, buff + 10);
Sie können durch Kopieren der Teilkette in einem anderen Speicher Ziel erreichen die gleiche Sache, aber es ist nicht sinnvoll, da Sie es bereits im Speicher haben.
Dies ist ein gutes Beispiel, um unnötiges Kopieren durch Zeiger zu vermeiden.
@procrastinator: Nicht wirklich nur zum Drucken. Dies ist ein praktikabler Ansatz für den Fall, dass der Teilstring nicht geändert wird. Auf diese Weise behalten Sie einfach ein Zeigerpaar, anstatt einen Puffer variabler Länge zuzuweisen. –
N̶i̶c̶e̶ ̶o̶n̶e̶ ̶f̶o̶r̶ ̶p̶r̶i̶n̶t̶i̶n̶g̶ ̶o̶n̶l̶̶̶̶y̶ Entschuldigung, wenn Sie mich falsch verstanden haben, meine ich, dass Ihre Lösung keine zusätzliche Zeichenfolge benötigt, die perfekt ist, wenn Sie nur drucken müssen: – leaf
Verwenden Sie sprintf zum Speichern der oben formatierten Zeichenfolge –
Verwenden char* strncpy(char* dest, char* src, int n)
von <cstring>
verwenden können. In Ihrem Fall müssen Sie den folgenden Code verwenden:
char* substr;
strncpy(substr, buff+10, 4);
Eine vollständige Dokumentation über die strncpy
Funktion here.
Dies wird Gedächtnisverlust Du wurdest gewarnt! : P – alexandernst
@alexandernst: Wie genau? 5 Bytes auf dem Stack (die freigegeben werden, wenn sie nicht mehr erreichbar sind) verschwenden kaum Speicher ... – Goz
Noch mehr als das, was Sie brauchen, aber ja, sie werden freigegeben, sobald der Code den Code verlässt aktueller Stapel. – alexandernst