samuele09 ha scritto:
Weierstrass ha scritto:
Togli lo static...
ho risolto, togliendo lo static non cambia nulla . Ho dovuto allocare dinamicamente l'array con malloc().
Ma che dici
https://www.onlinegdb.com/online_c_compile
Questo non compila perché c'è lo static
#include <stdio.h>
void esempio(unsigned int n) {
int i;
static unsigned int a[n];
for(i = 0; i < n; i++){
a[i] = i + 1;
printf("%u\n", a[i]);
}
}
int main(){
esempio(3);
esempio(5);
return 0;
}
Questo compila ed esegue
#include <stdio.h>
void esempio(unsigned int n) {
int i;
/*static*/ unsigned int a[n];
for(i = 0; i < n; i++){
a[i] = i + 1;
printf("%u\n", a[i]);
}
}
int main(){
esempio(3);
esempio(5);
return 0;
}
Se poi il problema è che vuoi un array globale, allora usi la malloc(), oppure - dato che comunque sicuramente dovrai porre un limite alla lunghezza del tuo array - puoi usare direttamente variabili globali
#include <stdio.h>
#define ARRAY_MAX 10000
unsigned int a[ARRAY_MAX];
int a_index;
int esempio(unsigned int n) {
if(n > ARRAY_MAX){
printf("errore : valore di n (%u) troppo grande\n", n);
return -1;
}
int i;
a_index = n;
for(i = 0; i < a_index; i++){
a[i] = i + 1;
printf("%u\n", a[i]);
}
return 0;
}
int main(){
esempio(3);
esempio(5);
esempio(ARRAY_MAX + 1);
return 0;
}