C permette punta a memoria con const o non-const puntatori, indipendentemente se l'oggetto è stato definito con il qualificatore const o meno.
6.5 Espressioni
- Un oggetto ha la propria valore memorizzato accessibile solo da un'espressione lvalue che ha una delle dei seguenti tipi:
- una versione qualificato di un tipo compatibile con il tipo effettivo dell'oggetto,
il prototipo di strstr in C è:
char *strstr(const char *s1, const char *s2);
Il puntatore restituito, se valido, punta alla stringa s1. Questo può essere ottenuto con un cast:
const char safe = 's' ;
char* careful = (char*)&safe ;
Il problema è modificare quella memoria.
6.7.3 Tipo qualificatori
- Se si tenta di modificare un oggetto definito con un tipo const qualificato attraverso l'uso di un Ivalue non-const -qualificato il tipo, il comportamento non è definito.
Dal momento che si è creato la stringa, si dovrebbe sapere se è possibile modificarlo o no, quindi è possibile accettare il valore di ritorno con un puntatore a const, per evitare problemi:
const char* find = strstr(...) ;
Hai compreso cstring e non string.h? Altrimenti, stai usando le versioni C - dio sa quello che fanno. La versione di '' std :: strstr' di C++ restituisce solo 'char *' se il primo parametro è anche un 'non' '' '' 'char ''. Vedi [qui] (http://en.cppreference.com/w/cpp/string/byte/strstr). (Scusa, ho appena notato anche il tag C ... quale lingua stai effettivamente utilizzando?) –
@TonyD La versione C è 'char * strstr (const char *, const char *); ' –
Nota che in C++ ci sono [due overload di strstr] (http://www.cplusplus.com/reference/cstring/strstr/) uno con parametro char const * e uno con char normale *, e i valori di ritorno Seguire. –