yo escribimos el siguiente código:advertencia: asignación descarta calificadores de tipo de destino puntero
void buildArrays(char *pLastLetter[],int length[], int size, const char str[]) {
int i;
int strIndex = 0;
int letterCounter = 0;
for (i=0; i<size; i++) {
while ((str[strIndex] != SEPERATOR) || (str[strIndex] != '\0')) {
letterCounter++;
strIndex++;
}
pLastLetter[i] = &str[strIndex-1];
length[i] = letterCounter;
letterCounter = 0;
strIndex++;
}
}
y yo estoy haciendo la advertencia anterior sobre pLastLetter[i] = &str[strIndex-1];
pLastLetter is a pointers array that points to a char in str[].
Cualquiera sabe ¿Por qué lo obtengo y cómo solucionarlo?
muchas gracias por la respuesta rápida, lo que me lleva a otra pregunta: si esta es la función: void buildArrays (char * pLastLetter [], int length [], int size, const char str []) ¿está bien llamar a esta función por: buildArrays (pLastLetter [], length, str) donde str es de tipo char * y no const char *? El compilador no muestra una advertencia, pero ¿puede causar un comportamiento indefinido? gracias –
@Asher: 'const T *' es solo una promesa de no modificar la punta a través de ese puntero, por lo que puede convertir implícitamente una 'T *' en 'const T *' bien. (Sin embargo, esto no funciona para los punteros a los indicadores. Consulte http://c-faq.com/ansi/constmismatch.html.) – jamesdlin