PDA

View Full Version : [C]Problema strcpy()


Devil_Jin
10-02-2008, 11:50
Ciao a tutti,
avrei un problemino con questo codice...
Questo spezzone fa parte di un programma un po' più complicato, per questo motivo ci sono altre definizioni non utilizzate. ;)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#define MAX_ADDR 16
#define MAX_LEN 101
#define MAX_DATA 11
#define MAX_ORA 9

typedef struct datiIndirizzi
{
char ip[MAX_ADDR];
char name[MAX_LEN];
} indirizzi;

main()
{
FILE *fp;

int indice = 0;
char indirizzo[MAX_ADDR];
char nome[MAX_LEN];

indirizzi *ip_addresses;

if((fp=fopen("ip.txt", "r"))==NULL)
{
printf("\nErrore apertura file 'ip.txt'.\n");
exit(EXIT_FAILURE);
}

while(fscanf(fp, "%s %s", &indirizzo, &nome)!=EOF)
{
strcpy(ip_addresses[indice].ip, indirizzo);
strcpy(ip_addresses[indice].name, nome);
printf("\nIndirizzo: %s, Nome: %s", ip_addresses[indice].ip, ip_addresses[indice].name);
indice++;
}

fclose(fp);
return 0;
}


In sostanza il programma dovrebbe semplicemente leggere un indirizzo ip ed un nome da file e memorizzarlo in una struct, il problema è che la strcpy per qualche motivo si blocca ed il programma da' errore su dev-c++ (dopo aver dato in output però tutti i dati corretti).
Temo si tratti di segmentation fault. In generale questo problema dovrebbe presentarsi quando si cerca di fare una strcpy su un puntatore non inizializzato, però in questo caso non saprei.
C'è qualcuno che può darmi una mano? Grazie! :)

cionci
10-02-2008, 12:17
Dov'è allocata questa struttura ? A cosa punta quel puntatore ?

indirizzi *ip_addresses;

Devil_Jin
10-02-2008, 12:39
E' ufficiale, oggi devo essere completamente rincitrullito. :muro:
Sarà anche che ho dormito poco... :coffee:

Non ho allocato ip_addresses... Mancava questa riga:
ip_addresses = (indirizzi *)malloc(sizeof(indirizzi));
Il bello è che avevo anche scritto che la segmentation fault si verifica quando non viene allocato un puntatore... Che testa! :doh:
Ora è tutto risolto, scusa il disturbo, cionci. E grazie! :D