2012-12-02 16 views
8

Devo trovare se un array di caratteri inizia con "ADD". So usare strcmp(), ma non so come ottenere i primi tre caratteri. Odio davvero lavorare con c-stringhe. Come posso prendere una porzione di un array di caratteri come char buffer[1024]?Come posso tagliare una stringa in C?

risposta

9

Utilizzare strncmp("ADD", buffer, 3).

Non sono sicuro di cosa intendi per "slice" ma qualsiasi puntatore all'interno di buffer potrebbe essere considerato una porzione. Ad esempio se buffer è una stringa che inizia con "ADD" quindi char *slice = buffer + 3 è la stessa stringa con "ADD" rimossa. Nota che slice è quindi una parte di buffer e la modifica del contenuto di slice modificherà il contenuto di buffer. E viceversa.

Se per "slice" si intende una copia indipendente, è necessario allocare un nuovo blocco di memoria e copiare le parti interessanti da buffer nella memoria. Le funzioni della libreria strdup e strndup sono utili per questo.

+0

Come si potrebbe specificare un offset e una fine che è più corta della sequenza di char originale? Come "ciao" + 1 taglia 3 (quindi "ell"); Questo è ciò che si intende per fetta credo. Fortunatamente strncmp e printf offrono opzioni per lavorare con questo, ma sarebbe bello mostrarlo come una sequenza di caratteri – scape

+0

@scape Vedi [Come estrarre una sottostringa da una stringa in C?] (Https://stackoverflow.com/questions/19555434) – kmkaplan

+0

"strtok in genere sostituisce i delimitatori con" \ 0 "poiché" mangia "l'input." che ovviamente ha alcuni inconvenienti. – scape

8

Usa strncmp .Assuming buffer è la variabile di testare, basta

strncmp (buffer,"ADD",3); 
Problemi correlati