2010-11-18 18 views

risposta

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

lavoro fatto :)

+10

Questa volontà sprecare memoria. Sei stato avvertito! : P – alexandernst

+11

@alexandernst: esattamente? 5 byte allocati nello stack (che verranno liberati quando non rientrano nello scope) non fanno altro sprecare memoria ... – Goz

+0

Ancora più di quello che ti serve, ma sì, si libereranno non appena il codice lascia il codice stack attuale. – alexandernst

10

È possibile utilizzare strstr. Esempio codice here

Si noti che il risultato restituito non è nullo.

+7

Questo è un po 'il contrario di una normale operazione di sottostringa - più come indexOf. – Grault

71

Supponendo che si conosce la posizione e la lunghezza della stringa:

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

si potrebbe ottenere la stessa cosa copiando la stringa ad un'altra destinazione di memoria, ma non è ragionevole, dal momento che già avete in memoria.

Questo è un buon esempio di evitare la copia non necessaria utilizzando i puntatori.

+0

@procrastinator: non solo per la stampa. Questo è un approccio praticabile nel caso in cui la sottostringa non verrà modificata. In questo modo è sufficiente mantenere una coppia di puntatori invece di allocare un buffer di lunghezza variabile. –

+1

N̶i̶c̶e̶ ̶o̶n̶e̶ ̶f̶o̶r̶ ̶p̶r̶i̶n̶t̶i̶n̶g̶ ̶o̶n̶l̶̶̶̶y̶ Scusa se mi sbagli, voglio dire che la tua soluzione non richiede una stringa aggiuntiva, che è perfetta quando hai solo bisogno di stampare :-) – leaf

+3

usa sprintf per memorizzare la stringa precedentemente formattata –

8

Si può semplicemente utilizzare strstr() da <string.h>

$ man strstr

+0

Vedere il commento di Grault sotto –

50

Usa char* strncpy(char* dest, char* src, int n) da <cstring>. Nel tuo caso è necessario utilizzare il seguente codice:

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

La documentazione completa sulla funzione herestrncpy.

+23

non dimenticare di aggiungere il carattere di terminazione null '\ 0' se lo fai. – evandrix

+10

non dimenticare di malloc il substr grande abbastanza se lo fai. – FUD

Problemi correlati