Holen Sie sich eine Teilzeichenfolge eines Zeichens * [duplicate]

Lesezeit: 3 Minuten

Ich habe zum Beispiel diese

char *buff = "this is a test string";

und bekommen wollen "test". Wie kann ich das machen?

Benutzeravatar von Goz
Göz

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

Job erledigt 🙂

  • Dadurch wird Speicher verschwendet. Du wurdest gewarnt! 😛

    – Alexandernst

    11. November 2013 um 19:00 Uhr

  • @alexandernst: Wie genau? 5 Bytes, die auf dem Stapel zugewiesen sind (die freigegeben werden, wenn sie aus dem Gültigkeitsbereich fallen), verschwenden kaum Speicher …

    – Göz

    11. November 2013 um 21:38 Uhr

  • Immer noch mehr als das, was Sie brauchen, aber ja, sie werden freigegeben, sobald der Code den aktuellen Stack verlässt.

    – Alexandernst

    11. November 2013 um 21:39 Uhr

  • @alexandernst: Das Problem ist, dass Sie mit diesen Zeichenfolgendaten nicht viel anfangen können, ohne sie zu kopieren. Wenn Sie einen Zeiger auf den Abschnitt aus der ursprünglichen Zeichenfolge nehmen, müssen Sie die Länge kennen, da sie kein Null-Terminator hat (ohne die ursprüngliche Zeichenfolge zu beeinflussen).

    – Göz

    12. November 2013 um 6:56 Uhr

  • Vergessen Sie nicht, einzuschließen.

    – Juan Pablo Rinaldi

    18. Januar 2014 um 4:03 Uhr

Benutzeravatar von Blagovest Buyukliev
Blagovest Buyukliev

Angenommen, Sie kennen die Position und die Länge des Teilstrings:

char *buff = "this is a test string";
printf("%.*s", 4, buff + 10);

Sie könnten dasselbe erreichen, indem Sie den Teilstring an ein anderes Speicherziel kopieren, aber das ist nicht sinnvoll, da Sie ihn bereits im Speicher haben.

Dies ist ein gutes Beispiel dafür, unnötiges Kopieren durch die Verwendung von Zeigern zu vermeiden.

  • @procrastinator: Nicht wirklich nur zum Drucken. Dies ist ein praktikabler Ansatz, falls die Teilzeichenfolge nicht geändert werden soll. Auf diese Weise behalten Sie einfach ein Zeigerpaar, anstatt einen Puffer mit variabler Länge zuzuweisen.

    – Blagovest Buyukliev

    7. Oktober 2015 um 7:19 Uhr

  • N̶i̶c̶e̶ ̶o̶n̶e̶ ̶f̶o̶r̶ ̶p̶r̶i̶n̶t̶i̶n̶g̶ ̶o̶n̶l̶̶̶y̶ Tut mir leid, wenn Sie mich falsch verstehen, ich meine, dass Ihre Lösung keine zusätzliche Zeichenfolge erfordert, was perfekt ist, wenn Sie nur drucken müssen 🙂

    Benutzer1636522

    8. Oktober 2015 um 5:12 Uhr


  • Verwenden Sie sprintf, um die obige formatierte Zeichenfolge zu speichern

    – Parnab Sanyal

    9. August 2016 um 18:53 Uhr

  • @ParnabSanyal wie kann ich sprintf verwenden, um die Teilzeichenfolge zu speichern? Muss ich die Länge der Teilzeichenfolge als dritten Parameter übergeben?

    – Verma Aman

    11. November 2018 um 14:56 Uhr

  • @VermaAman nein, tust du nicht. Ihr erstes Argument wäre die resultierende Zeichenfolge, das zweite Argument wäre die Quellzeichenfolge und wenn Sie Platzhalter im zweiten Argument haben, wie %c, %i usw., dann vom dritten Argument bis zur Anzahl der Platzhalter, wären die tatsächlichen Werte des Platzhalters (durch Komma getrennt). So wie printf

    – Parnab Sanyal

    11. November 2018 um 15:13 Uhr

Benutzeravatar von Mihai Scurtu
Mihai Scurtu

Verwenden char* strncpy(char* dest, char* src, int n) aus <cstring>. In Ihrem Fall müssen Sie den folgenden Code verwenden:

char* substr = malloc(4);
strncpy(substr, buff+10, 4);

Vollständige Dokumentation über die strncpy Funktion hier.

  • vergessen Sie nicht, das Null-Terminierungszeichen ‘\0’ hinzuzufügen, wenn Sie dies tun.

    – Evandrix

    26. Januar 2013 um 8:01 Uhr

  • Vergessen Sie nicht, den substr groß genug zu mallocieren, wenn Sie dies tun.

    – FUD

    18. September 2015 um 5:31 Uhr

Sie können einfach verwenden strstr() aus <string.h>

$ Mann Strstr

Benutzeravatar von Milan
Mailand

Sie können verwenden strstr. Beispielcode hier.

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

  • Dies ist eine Art Umkehrung einer normalen Substring-Operation – eher wie indexOf.

    – Grault

    28. August 2013 um 6:52 Uhr

  • Dies ist eine Art Umkehrung einer normalen Substring-Operation – eher wie indexOf.

    – Grault

    28. August 2013 um 6:52 Uhr

1425250cookie-checkHolen Sie sich eine Teilzeichenfolge eines Zeichens * [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy