
a B C
tengo la siguiente función:
void getdata(int arr[], int n)
{
for (int i = 0; i < n; i++)
{
int a = srand(time(NULL));
arr[i] = a;
}
}
Y lo llamo main
:
getdata(arr, 1024);
Obtengo “valor nulo no ignorado como debería ser”, pero no entiendo qué está mal. ¿Por qué recibo este error?

pmg
int a = srand(time(NULL));
El prototipo para srand
es void srand(unsigned int)
(siempre que haya incluido <stdlib.h>
).
Esto significa que no devuelve nada… pero está utilizando el valor que devuelve (???) para asignar, por inicialización, a a
.
Editar: esto es lo que tienes que hacer:
#include <stdlib.h> /* srand(), rand() */
#include <time.h> /* time() */
#define ARRAY_SIZE 1024
void getdata(int arr[], int n)
{
for (int i = 0; i < n; i++)
{
arr[i] = rand();
}
}
int main(void)
{
int arr[ARRAY_SIZE];
srand(time(0));
getdata(arr, ARRAY_SIZE);
/* ... */
}

jamin gris
El cartel original cita un mensaje de error del compilador de GCC, pero incluso al leer este hilo, no está claro que el mensaje de error se haya abordado correctamente, excepto por la respuesta de @pmg. (+1, por cierto)
error: valor nulo no ignorado como debería ser
Este es un mensaje de error de GCC que significa que el valor de retorno de una función es ‘vacío’, pero que está tratando de asignarlo a una variable no vacía.
Ejemplo:
void myFunction()
{
//...stuff...
}
int main()
{
int myInt = myFunction(); //Compile error!
return 0;
}
No está permitido asignar void a números enteros o de cualquier otro tipo.
En la situación del OP:
int a = srand(time(NULL));
…No se permite. srand()
, según la documentacióndevoluciones vacío.
Esta pregunta es un duplicado de:
- error: valor nulo no ignorado como debería ser
- “valor nulo no ignorado como debería ser” – Qt/C++
- Error de compilación de GCC C, valor nulo no ignorado como debería ser
Respondo, a pesar de que está duplicado, porque este es el resultado principal en Google para este mensaje de error. Debido a que este hilo es el resultado principal, es importante que brinde un resultado sucinto, claro y fácil de encontrar.
srand
no devuelve nada por lo que no puede inicializar a
con su valor devuelto porque, bueno, porque no devuelve un valor. quisiste llamar rand
¿así como?
int a = srand(time(NULL))
arr[i] = a;
Debiera ser
arr[i] = rand();
Y pon srand(time(NULL))
en algún lugar al principio de su programa.
“valor nulo no ignorado como debería ser” este error ocurre cuando una función como srand(time(NULL)) no devuelve algo y usted lo está tratando como si estuviera devolviendo algo. Como en el caso de la función pop() en la cola, si almacena el elemento emergente en una variable, obtendrá el mismo error porque no devuelve nada.
no inicialice el PRNG una y otra vez. Una vez por ejecución del programa es suficiente.
– pmg
17 de enero de 2012 a las 14:28
¿Cómo se declara arr? ¿Qué error obtienes? ¿De qué valor vacío estás hablando?
–Paul Tomblin
17 de enero de 2012 a las 14:28
¿Estás haciendo algo como
x = getdata(arr,1024)
?– parapura rajkumar
17 de enero de 2012 a las 14:28
Te falta un punto y coma. Por favor, prefiera copiar/pegar su código en lugar de escribirlo de nuevo.
– pmg
17 de enero de 2012 a las 14:31
NOTA: si está tratando de pasar arr como un VLA (arreglo de longitud variable), debe declarar
void getdata(int n, int arr[n]) {...}
– Jamie Paté
19 de diciembre de 2017 a las 23:45