Domanda Esercizio C creazione 10000 file ed eliminazione 1000 casuali

Partendo per step, la mia prima difficoltà in C è generare quelle stringhe di 12 caratteri casuali
Puoi fare una cosa di questo tipo
C:
#include <stdlib.h>

void randomize(char string[], int n) {
    for (int i = 0; i < n - 1; i++)
        string[i] = rand() % 25 + 65;
    string[n-1] = 0;
}

// ...

char filename[10000][13]; // 12 symbols + '\0'
for (int i = 0; i < 10000; i++)
    randomize(filename[i], 13);
 
  • Mi piace
Reazioni: DanyDollaro
Ultima modifica:
C:
    char filename[10000][13];
    for (int i = 0; i < 1000; i++) {
        for (int j = 0; j < 13; j++) {
            filename[i][j] = random() % 25 + 65;
        }
    }
Non è del tutto corretto, nell'esempio che ti ha mostrato St3ve noterai questa riga:
C:
string[n-1] = 0;
Che è stata aggiunta appositamente per evitare di sovrascrivere l'ultimo carattere della stringa, ora te ne spiego il motivo.

In C le stringhe sono un array di char terminate da un carattere nullo, che sarebbe '\0', e che ha come corrispettivo valore intero 0.
Nel tuo codice, per precisare nel ciclo for (int j = 0; j < 13; j++) si avrà che l'ultimo valore di j sarà appunto 12, andando a sovrascrivere quel carattere.
Per farti un esempio, anche perchè agli inizi potresti trovarlo un pò confusionario:
C:
int main()
{
    // Dichiari una stringa di 13 caratteri, a cui potrai
    // accedere con gli indici che vanno da 0 a 12
    char string[13];
   
    // Vogliamo che il ciclo for imposti la stringa con un semplice valore progressivo
    for (int i = 0; i < 13 - 1; i++)
        string[i] = i;
   
    // In fine, ricordati che l'ultimo carattere della stringa,
    // che in questo caso si trova all'indice 12, dovrà avere
    // come valore '\0' (ovvero 0)
    string[13 - 1] = '\0';

    // string[13 - 1] = 0; // Ha il medesimo significato
}

EDIT:
Ti lascio questo esempio
C:
#include <stdio.h>

int main()
{
    char good_str[4];
    char bad_str[4];

    for (int i = 0; i < 4 - 1; i++)
        good_str[i] = i + 'a';
    good_str[4 - 1] = '\0';

    for (int i = 0; i < 4; i++)
        bad_str[i] = i + 'a';

    printf("Good string: %s\nBad string: %s\n", good_str, bad_str);
}
 
  • Mi piace
Reazioni: St3ve

jr_sottomajor

Utente Silver
2 Luglio 2017
96
33
4
79
Salve ragazzi, stavo svolgendo questo esercizio in c :

"1. Scrivere un programma C che crea 10.000 file nella directory corrente, generando stringhe di 12 caratteri scelti a caso (codice ASCII da 65 a 90) memorizzate in un array.
2. In ogni file vengono scritti 4 interi casuali.
3. Successivamente il programma deve leggere tutti i nomi dei file creati in un array e misurare il tempo necessario per cancellare 1.000 file selezionando nomi a caso dall'array e stampare sullo stdout il valore finale."

Partendo per step, la mia prima difficoltà in C è generare quelle stringhe di 12 caratteri casuali, avevo pensato ad una roba del tipo:
C:
#define NFILE 10000

int main(int argc, char* argv[]){
    char file[NFILE];
    for(int i = 0; i<NFILE; i++){
        file[i] = random()%25+65;
    }
    
}
Ma non credo proprio si faccia così, mi va anche in segmentation fault .
1 domanda: come si generano stringhe da 12 caratteri casuali memorizzate in un array?
Sembrerà sciocco ma una volta capito questo dovrebbe essere chiaro tutto
 
Ultima modifica:
Sarebbe possibile evitare la funzione e fare tutto magari usando due for?
Messaggio unito automaticamente:

C:
char filename[10000][13];
for (int i=0; i<1000; i++){
    for (int j=0; j<13;j++){
        filename[i][j] = random()%25+65;
    }
}

Tipo così, evito la funzione esterna