Question

I really need to know how to fix this.

I have a file that is read and I store the strings from the file into an array that is passed as an argument, but I can't figure out how to make it work.

When I do print the content of the array it says null. So how do I pass a multi-dimensional array of strings to readfiles() and make it save the strings in the array passed as parameter, each string in one position?

Thanks for the help.

#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <stdio.h>
#include <strings.h>

#define max_chars_string 10000
#define n_strings 100


int main(int argc, char **argv)
{
    char *filename;
        char strings_hashes[n_strings][max_chars_string];
        char * pointer_string = &strings_hashes[0][0]; 
    int n_lines;
    int i = 0;




    filename = (char*)malloc(strlen(argv[1])*sizeof(char));

    if(argc !=3){
        fprintf(stderr, "Usage : %s [text_file] [cores]",argv[0]);
        exit(0);
    }

    strcpy(filename,argv[1]);
    read_lines(filename,pointer_string); 
    for(i = 0; i<n_lines;i++){
        printf("%s \n",strings_hashes[i][max_chars_string]);
    }

  return 0;
}

void read_lines(char * filename, char *pointer){ 
    FILE *fp;
    char str[max_chars_string];
    int i =0;


    if((fp = fopen(filename, "r"))==NULL) {
      printf("Cannot open file.\n");
      exit(1);
    }

    while(!feof(fp)) {
        while(fgets(str, sizeof str, fp)) {
           strcpy(pointer, str);
           printf("%s", str);
           pointer++;
           i++;
      }

  }
  fclose(fp);
}
Was it helpful?

Solution

Change

void read_lines(char * filename, char *pointer){ 

to

void read_lines(char * filename, char (*pointer)[max_chars_string]){ 

(pointer's type needs to be "pointer to array of max_chars_string chars". When using pointers to access multidimensional arrays, the pointer type needs to know the all the dimensions except for the outermost one, so that it knows how far to skip along when incremented.)

Change

strcpy(pointer, str);

to

strcpy(*pointer, str);

Now call it as

read_lines(filename,strings_hashes);

(This is equivalent to the following, which may be clearer:)

read_lines(filename,&string_hashes[0]);

Finally, you want to print a string not an individual character, so use

printf("%s \n",strings_hashes[i]);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top