Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C] Copiare solo un certo numero di caratteri in una stringa

    Salve,
    Sto facendo alcuni esercizi per l'università, mi sto preparando all'esame di C il 5, e c'è un esercizio in cui mi viene chiesto di fare un programma che ti chiede la lunghezza della stringa (allocata dinamicamente), e poi ti chiede di inserire la stringa, tu puoi scrivere in input tutti i caratteri che vuoi ma poi il programma ti copia solo X caratteri dove X è il numero che hai immesso.

    Ho provato varie cose ma senza alcun risultato
    The gate to tomorrow is not the light of heaven but the darkness in the depth of the earth

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    258
    non sono sicuro che questo codice funzioni... l'ho buttato giù così... però dovrebbe andare:

    codice:
    int max_car, indice;
    char *stringa;
    
    main()
    {
    printf ("Inserire il numero di caratteri: ");
    scanf ("%d", &max_car);
    stringa = (char *) malloc (max_car);
    printf ("Inserire la stringa:\n");
    for (indice=0; indice<max_car; indice++)
    	getchar (*(stringa+indice));   /* Legge il carattere e lo mette nella stringa */
    *(stringa+indice)='\0';  /* Mette il tappo alla stringa */
    }
    poi, volendo, per visualizzarla dovrebbe bastare la solita

    printf ("%s", stringa);

    e, anche se non ne sono sicuro, anche

    carat = stringa[3]

    dovrebbe andare

  3. #3
    Codice PHP:
    #include <stdio.h>
    int main(){
        
    int i=0lunghezza;
        
    char *stringatemp;
        
    printf("Quanto lo vuoi lungo? \n> ");
        
    scanf("%d", &lunghezza);
        
    getchar();
        
    stringa=(char*)malloc(lunghezza*sizeof(char));
        if(
    stringa!=NULLprintf("\n > memoria allocata correttamente < ");
        
    printf("\nVerranno copiati solo %d caratteri"lunghezza);
        
    printf("\nPer terminare l'immissione e visualizzare la stringa premere INVIO\n");
        while((
    temp=getchar())!='\n'){
            if(
    i<lunghezza){
               
    stringa[i]=temp;
               
    i++;
            }
        }
        
    stringa[i]='\0';
        
    printf("Stringa inserita > %s\n"stringa);
        
    getchar();
        return 
    0;

    Se una funzione riceve come argomento un puntatore di puntatore di puntatore quando la invochi ricordati che puo ricevere o un puntatore di puntatore di puntatore o l'indirizzo di un puntatore di puntatore

  4. #4
    beh insomma alla fine non avevo sbagliato, il problema è questo:
    ho il puntatore a puntatori **array, che inizializzo con malloc (questo è il num di stringhe), poi per ogni stringa, mi viene chiesta la lunghezza, una volta avuta la lunghezza (esci dal prog se è 0..lo so ho messo un break ma solo per pigrizia ) devo inizializzare l'elemento dell'array di puntatori array[i], e qui iniziano i problemi. Se faccio un altro puntatore string e faccio quello che dovrei fare con array[i] funziona tutto bene (il prog salva i caratteri che voglio io), se invece uso array[i] il programma va in crash (infatti ho commentato le parti che non vanno bene, ad ognuna di queste righe si blocca). Ero quasi tentato di inviare la segnalazione del problema alla microsoft quando mi viene chiesto di farlo, magari loro sanno aiutarmi :P

    Codice PHP:
    #include <stdio.h>
    #include <string.h>
    main()
    {
    char **array, *stringc;
    int numlunghij;
    printf("inserisci il numero di stringhe: ");
    scanf("%d", &num);
    array=(
    char **)malloc(num);
    for (
    i=0i<numi++){
        
    printf("inserisci la lunghezza della stringa: ");
        
    scanf("%d", &lungh);
        
    getchar();
        if (
    lungh==0){
           break;
           }
        
    string=(char *)malloc((lungh+1)*sizeof(char));
        array[
    i]=(char *)malloc((lungh+1)*sizeof(char));
       
    j=0;
       while((
    c=getchar())!='\n'){
            if(
    j<lungh){
               
    string[j]=c;
               
    //*(array[j])=c;
               
    j++;
            }
        }
        
    //*(array[j])='\ 0';
        
    string[j]='\ 0';
        
    //strcpy(array[i], string);
        
    printf("%s \n"string);
        
    //printf("%s \n", *array);
        
    array++;
        }

    The gate to tomorrow is not the light of heaven but the darkness in the depth of the earth

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Originariamente inviato da valepu
    codice:
    array=(char **)malloc(num);
    Sbagliato, devi moltiplicare 'num' per sizeof(char*)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  6. #6
    Originariamente inviato da andbin
    Sbagliato, devi moltiplicare 'num' per sizeof(char*)
    grazie, era quello che non funzionava mi vergogno di me stesso :rollo:
    The gate to tomorrow is not the light of heaven but the darkness in the depth of the earth

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.