2010-11-18 17 views

Antwort

167
char subbuff[5]; 
memcpy(subbuff, &buff[10], 4); 
subbuff[4] = '\0'; 

Job :) getan

+10

Dies wird Gedächtnisverlust Du wurdest gewarnt! : P – alexandernst

+11

@alexandernst: Wie genau? 5 Bytes auf dem Stack (die freigegeben werden, wenn sie nicht mehr erreichbar sind) verschwenden kaum Speicher ... – Goz

+0

Noch mehr als das, was Sie brauchen, aber ja, sie werden freigegeben, sobald der Code den Code verlässt aktueller Stapel. – alexandernst

10

Sie können strstr verwenden. Beispielcode here

Beachten Sie, dass das zurückgegebene Ergebnis nicht null terminiert ist.

+7

Dies ist eine Art umgekehrte normale Teilstringoperation - mehr wie indexOf. – Grault

71

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.

+0

@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. –

+1

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

+3

Verwenden Sie sprintf zum Speichern der oben formatierten Zeichenfolge –

8

Sie haben soeben strstr() von <string.h>

$ man strstr

+0

Siehe Graults Kommentar unten –

50

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.

+23

Vergessen Sie nicht, das Nullbeendigungszeichen '\ 0' hinzuzufügen, wenn Sie dies tun. – evandrix

+10

Vergiss nicht, den substr groß genug zu tun, wenn du das machst. – FUD

Verwandte Themen