Finlandia_C
Finlandia_C

Reputation: 395

Reading a file of strings to a string array

I'm trying to read a file (full of a word followed by a newline), to an array full of pointers to each string. Then print each word in the array, and count the number of words read. However it just prints no words and says 0 words imported.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define ARGS_REQUIRED 2
#define MAX_WORDS 50
#define MAX_WORD_LENGTH 1024

void read_file (char * argv[], char word_storage[]);
void usage (char * argv[]);

int main (int argc, char* argv[])

{
char word_storage[MAX_WORDS];

if (argc == ARGS_REQUIRED)
    {
        system("clear");
        read_file(&argv[1], word_storage);
    }
else 
    {
        usage(&argv[0]);
    }

return 0;

}

void usage (char * argv[])

{
     printf("Incorrect usage, try: ./program_name %s\n", argv[1]);
}

void read_file (char * argv[], char word_storage[])

{

FILE * file_name;
char *word[MAX_WORDS][MAX_WORD_LENGTH]; 
int word_count = 0, i = 0, j;

    if ((file_name = fopen(argv[0], "r")) == NULL)
        {
            printf("Cannot open file ... \n");
        }
    while (fscanf(file_name, "%s", *word[MAX_WORDS]) == 1)
        {
            for (j = 0; j < MAX_WORDS; j++)
                {
                   if (printf("%s\n", *word[j]) == 1)
                    {
                        word_count++;
                    }
                }

        }

fclose(file_name);        
printf("Imported words: %d\n", word_count);

}

Upvotes: 0

Views: 53

Answers (1)

Pawan
Pawan

Reputation: 1605

You can modify your program as below. It worked for me. Please add error check for printf() function.

void read_file (char * argv[], char word_storage[])
{

FILE * file_name;
char word[MAX_WORDS][MAX_WORD_LENGTH];
int word_count = 0, i = 0, j;

    if ((file_name = fopen(argv[0], "r")) == NULL)
        {
            printf("Cannot open file ... \n");
        }
    while (fscanf(file_name, "%s", word) == 1)
        {
printf("%s\n",word);
word_count++;
/*
            for (j = 0; j < MAX_WORDS; j++)
                {
                    if (printf("%s\n", word[j]) == 1)
                    {
                        word_count++;
                    }
                }
*/
        }

fclose(file_name);
printf("Imported words: %d\n", word_count);

}

Upvotes: 1

Related Questions