Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [C] Strutture

  1. #1

    [C] Strutture

    Salve a tutti,
    avrei qualche problemino con le strutture nel c (utilizzo dev cpp come compilatore), ovvero ho il seguente codice:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct{
                       int giorno;
                       int mese;
                       int anno;
                   }data;
    
    typedef struct {
                       char nome[20];
                       char cognome[20];
                       data nascita;
                       int id;
                   }studente;
    
    int main()
    {   
        studente prova;
        prova.id = 12;
        prova.nome[] = "Gudio";
        printf("%d\n", prova.id);
        printf("%c\n", prova.nome[0]);
      
      system("PAUSE");	
      return 0;
    }
    Ora questo codice mi da errore sull'assegnazione di "prova.nome[]". Ho provato anche ad inserire un singolo carattere ed il risultato è che la riga di stampa mi stampa "un carattere vuoto" e nulla più.

    Sicuramente mi perdo sulla sintassi. Il mio scopo, per esercitarmi un pò sulle strutture è di creare un vettore di strutture e tra i campi della struttura dei campi di vario tipo.

    Con gli int non ho problemi, con i char, quindi con i vettori invece si. Sarà che bisogna fare un passaggio per riferimento, ma non riesco "a capire" come dovrei fare.

    Vi ringrazio in anticipo,
    Neptune.
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Le stringhe in C non si possono "assegnare". Devi usare la funzione strcpy in string.h, o meglio strncpy().
    every day above ground is a good one

  3. #3
    Originariamente inviato da YuYevon
    Le stringhe in C non si possono "assegnare". Devi usare la funzione strcpy in string.h, o meglio strncpy().
    Qual'è la differenza fra le due funzioni?
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    La seconda è la versione "safe" della prima: con la strcpy() non esegui alcun controllo sulla lunghezza della stringa copiata, quindi se questa è maggiore della lunghezza del buffer in cui deve avvenire la copia ti ritrovi con un buffer overflow (che compromette sia il funzionamento che la sicurezza del programma). Con strncpy() invece specifichi come terzo argomento il massimo dei caratteri da copiare, quindi anche se la stringa sorgente risultasse più lunga verrebbe copiato un numero di caratteri pari a quello specificato da te.
    every day above ground is a good one

  5. #5
    Originariamente inviato da YuYevon
    La seconda è la versione "safe" della prima: con la strcpy() non esegui alcun controllo sulla lunghezza della stringa copiata, quindi se questa è maggiore della lunghezza del buffer in cui deve avvenire la copia ti ritrovi con un buffer overflow (che compromette sia il funzionamento che la sicurezza del programma). Con strncpy() invece specifichi come terzo argomento il massimo dei caratteri da copiare, quindi anche se la stringa sorgente risultasse più lunga verrebbe copiato un numero di caratteri pari a quello specificato da te.
    Quindi copia i primi n valori?

    Mentre la strcat e la strncat, a parte che l'ultima specifica il numero di caratteri, che fa? Copia i valori nella prima stringa eliminandoli dalla seconda?

    Con con la strncpy e la strncat, se avessi un vettore di destinazione più grande che succederebbe? tipo:

    Se coppiassi nella stringa "ciao mondo" la stringa "pila!" avrei "pila! mondo" o me lo sovrascriverebbe?

    E per la cat?
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Una domanda alla volta, tra l'altro fai prima a provare o a leggere su un libro che ad aspettare una risposta su un forum ;D

    Comunque la funzione strcat() concatena due stringhe, o per meglio dire concatena la seconda stringa in input alla prima, ammesso che come primo argomento specifichi un buffer sufficientemente grande per "accogliere" i caratteri della stringa concatenata.

    Con con la strncpy e la strncat, se avessi un vettore di destinazione più grande che succederebbe? tipo:

    Se coppiassi nella stringa "ciao mondo" la stringa "pila!" avrei "pila! mondo" o me lo sovrascriverebbe?
    se dopo una copia del genere andassi a stampare il buffer con una printf(), avresti soltanto "pila!" perché la strcpy aggiungerebbe il '\0' alla fine della stringa copiata, e la printf() stampa appunto fino al '\0'. Se invece andassi a stampare tutto il buffer (magari con un for per tutta la sua lunghezza) ti ritroveresti con

    "pila!mondo"

    ed eventuali altri caratteri sporchi dopo.

    E per la cat?
    Non esiste una funzione cat().
    every day above ground is a good one

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.