Re: reading strings from file
- From: Daniel Rudy <spamthis@xxxxxxxxxxxx>
- Date: Mon, 02 Jan 2006 23:54:16 GMT
At about the time of 1/2/2006 3:17 PM, Giff stated the following:
> Emmanuel Delahaye ha scritto:
>
>
>
>>Do you meant:
>
>
>>string1<blank>string2<EOL>
>>string3<blank>string4<EOL>
>
>
>>?
>
>
> exactly, thanks for replying
>
>
>
>>You can use each line with fgets() and then extract the strings with
>>sscanf() and "%s %s". Make sure that sscanf() returns 2.
>
>
> I was trying with fscanf, now I tried the way u suggested with no results:
>
> char *array1[2], *array2[2],buff[512];
> FILE *f;
>
> i=0;
> do {
>
> if ( fgets(buff,sizeof(buff),f)==NULL ) perror("fgets");
> if ( (i = sscanf(buff,"%s %s",array1[i],array2[i])) printf("%d\n",i);
> i++;
> }while(i<2);
>
> it opens the file correctly but then the sscanf returns 0, it gets stuck
> during the second iteraction of the do-while
>
> I'm sure I'm doing some really stupid mistakes, I'm not experienced,I've
> been coding the whole day and this should be working tomorrow
>
> thanks a lot
>
>
>
I would do something like this...
#define MAX_ARRAY 2 /* number of strings to store */
#define MAX_CHAR 64 /* storage size of each string */
#define MAX_BUFF 512 /* input buffer size */
char array1[MAX_ARRAY][MAX_CHAR];
char array2[MAX_ARRAY][MAX_CHAR];
char buff[MAX_BUFF];
FILE *f;
for (i = 0; i < MAX_ARRAY; ++i)
{
ptr = fgets(buff, sizeof(buff), f);
if (ptr == NULL) perror("fgets");
j = sscanf(buff, "%s %s", &array1[i], &array2[i]);
if (j != 2) perror("sscanf");
}
This is a guideline and it may or may not work correctly. The problem
that I see with your code is that you are defining the arrays as a
pointer. No storage has been allocated to hold the actual data. Your
usage of sscanf with the pointers is correct as far as I can tell, but
those pointers need to point to something. As it is, sscanf writes the
strings to random locations in memory. I'm amazed that you didn't get a
general protection fault or a segmentation fault when you ran this.
Also, arrays of strings are a little strange because a single string is
in itself an array of char, so to allocate an array of strings, you need
a 2 dimensional array of char.
--
Daniel Rudy
Email address has been base64 encoded to reduce spam
Decode email address using b64decode or uudecode -m
Why geeks like computers: look chat date touch grep make unzip
strip view finger mount fcsk more fcsk yes spray umount sleep
.
- References:
- reading strings from file
- From: Giff
- Re: reading strings from file
- From: Emmanuel Delahaye
- Re: reading strings from file
- From: Giff
- reading strings from file
- Prev by Date: Re: Input-line reverser
- Next by Date: Re: gets() - dangerous?
- Previous by thread: Re: reading strings from file
- Next by thread: Re: reading strings from file
- Index(es):
Relevant Pages
|