I am trying to write some code that will open a file, read its contents line by line, and store each of these lines in an array.
First, I open the file and count the number of lines, each line has a fixed length, so I just do this:
char buf2[LINE_LENGTH]; int in2 = open("toSend2", O_RDONLY); int number_of_lines = 0; for (;;) { char* p2 = buf2; int count = read (in2, p2, LINE_LENGTH); if (count < 0) { printf("ERROR"); break; } if (count == 0) break; number_of_lines++; printf("count: %d \n",count); printf("File 2 line : %s", p2); printf("\n"); } close (in2);
So far this has worked well, number_of_lines is really the number of lines in the "toSend2" file, and each of my printfs is the lines contained in this file.
Now with the number of lines, I create an array of lines, and then I basically look at the whole file again, but this time I would like to save each of the lines in the array (perhaps the best way to find from the number of lines in the file, but all I tried failed!)
char * array[number_of_lines]; int b=0; int in3=0; in3 = open("toSend2", O_RDONLY); for (;;) { char* p3 = buf3; int count = read (in2, p3, LINE_LENGTH); if (count < 0) { printf("ERRORRRRRR"); break; } if (count == 0) break; array[b] = p3; b++; printf("count: %d \n",count); printf("FILE 2 LINEEEEEE : %s", p3); printf("\n"); } close(in3);
This, of course, does not work: each of my printfs is a straight line plus the last line of the file, for example, the first printf will look like this:
FILE 2 LINEEEEEEE: "First line of file" "Last line of file"
And after this for loop, when I trace the contents of my array, each element in it is just the last line of the file. I think this is because I just put the same pointer (pointing to another line at that moment) in the array every time, but in the end it will point to the last line, so everything will be the last line.
How can I solve my problem?
ps: I just started C, so please donβt think that I even know the basic things about it :(