I already mentioned I needed a code for remove rows in the file. I have that code now, and in fact it works, but every time I use it, the run fails. I don't know how to fix the problem...
Thanks again for all the help you gave me until now.

Here is the code I have to remove rows(all translated, I hope... ):

Code:
typedef struct city_t{
    char city_id[TAM_STR];
    char city_name[TAM_STR];
    char county_name[TAM_STR];
    char district_name[TAM_STR];
} city_t;


typedef struct meteo_t{
    char meteo_id[TAM_STR];
    char meteo_city_id[TAM_STR];
    char tempt_max[TAM_STR];
    char tempt_min[TAM_STR];
    char humidity[TAM_STR];
    char preassure[TAM_STR];
    char date[11];
} meteo_t;


meteo_t *read_meteo(const char *filename, size_t *len)
{
    if(filename == NULL || len == NULL)
        return NULL;


    FILE *fp = fopen(filename, "r");
    if(fp == NULL)
    {
        fprintf(stderr, "Could not open %s: %s\n", "meteo.csv", strerror(errno));
        return NULL;
    }
    meteo_t *arr = NULL, *tmp;
    *len = 0;
    char line[1024];


    while(fgets(line, sizeof line, fp))
    {
        tmp = realloc(arr, (*len + 1) * sizeof *arr);
        if(tmp == NULL)
        {
            fprintf(stderr, "could not parse the whole file %s\n", "meteo.csv");
            if(*len == 0)
            {
                free(arr);
                arr = NULL;
            }
            return arr;
        }
        arr = tmp;
        sscanf(line, "%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%s", (arr[*len].meteo_id), (arr[*len].meteo_city_id), (arr[*len].tempt_max), (arr[*len].tempt_min), (arr[*len].humidity), (arr[*len].preassure), (arr[*len].date));
        (*len)++;
    }
    fclose(fp);
    if(*len == 0)
    {
        free(arr);
        arr = NULL;
    }
    return arr;
}


void print_all_meteo(meteo_t *meteo, city_t *cities, size_t len)
{
    if(meteo == NULL || cities == NULL)
        return;


    for(size_t i = 0; i < len; ++i) {
        int id = atoi(meteo[i].meteo_city_id);
        printf("ID: %s \n city: %s\n maximum temperature: %s\n minimum temperature: %s\n humidity: %s\n pressure: %s\n, date: %s\n", meteo[i].meteo_id, cities[id].city_name, meteo[i].tempt_max, meteo[i].tempt_min, meteo[i].humidity, meteo[i].preassure, meteo[i].date);
    }
}


meteo_t *delete_meteo_id(meteo_t *meteo, const int id, size_t len, size_t *new_meteo_len) {

    *new_meteo_len=0;
    bool deleted = false;       
    struct meteo_t *new_meteo;
    new_meteo = (struct meteo_t *)malloc((*new_meteo_len + 1)*sizeof(struct meteo_t));


    for(size_t i = 0; i < len; ++i) {        
        int meteo_id = atoi(meteo[i].meteo_id);
        if (id == meteo_id || deleted == true) {
            new_meteo[i] = meteo[i + 1];  
            deleted = true;   
            (*new_meteo_len)++;  
        } else {
            new_meteo[i] = meteo[i];            
        }
    }   
    if (deleted == false) {
        printf("id %d not found", id);
        return NULL;
    }
    return new_meteo;
}


void removeInfo() {
    size_t cities_len;
    city_t *cities = read_cities("cities.csv", &cities_len);


    if(cities == NULL) {
        printf("ERROR");        
    }


    size_t meteo_len;
    meteo_t *meteo = read_meteo("meteo.csv", &meteo_len);


    if(meteo == NULL) {
        printf("ERROR");        
    }


    print_all_meteo(meteo, cities, meteo_len);
    
    int delete_id;
    printf("What is the id you desire to remove: ");
    scanf("%d", &delete_id);    
    
    size_t new_meteo_len; 
    meteo_t *new_meteo=delete_meteo_id(meteo, delete_id, meteo_len,  &new_meteo_len);


    if(new_meteo == NULL) {
        return;       
    }
    FILE *fp = fopen("meteo.csv", "wb");


    if(fp == NULL)
    {
        fprintf(stderr, "Unable to open the file meteo.csv: %s\n", strerror(errno));
        free(new_meteo);
    }
    print_meteo(new_meteo, meteo_len -1, fp);
    fclose(fp);
    free(new_meteo);
}
(All my codes are so long... Sorry about that...)