Note that there are some explanatory texts on larger screens.

plurals
  1. POError in getting the size of the text file into Buffer
    primarykey
    data
    text
    <pre><code>if (fwarrior != NULL) { /* Go to the end of the file. */ if (fseek(fwarrior, 0, SEEK_END) == 0) { /* Get the size of the file. */ long bufsize = ftell(fwarrior); if (bufsize == -1) { printf("Error in reading the size of file"); } /* Allocate our buffer to that size. */ buffer = malloc(sizeof(char) * (bufsize + 1)); /* Go back to the start of the file. */ if (fseek(fwarrior, 0, SEEK_SET) == 0) { printf("Error = File is considered NULL"); } /* Read the entire file into memory. */ size_t newLen = fread(buffer, sizeof(char), bufsize, fwarrior); if (newLen == 0) { fputs("Error reading file", stderr); } else { buffer[newLen] = '\0'; /* Just to be safe. */ } } } </code></pre> <p>When this code is run via VS2012 on Windows, what appears is <code>"Error = File is considered NULL"</code></p> <p>I am trying to assign the contents of a certain file into buffer and use <code>sscanf</code> later on to create a singly linked-list to assign the content of the file into their respective variables.</p> <p>I just got the code above from a website and the maker of this code said the code above basically reads the entire content of the file then assigns them into the buffer so that we could use <code>sscanf</code> later.</p> <p>Sample:</p> <pre><code>#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; typedef struct hero_data{ char name[254]; char title[254]; int encoding; int startstr; double incstr; int startdex; double incdex; int startintel; double incintel; int basemindmg,basemaxdmg; double bat; double basearmor; struct hero_data *next; struct hero_data *type; struct hero_data *Class; }hero; int main() { hero *curr[] = {0}; hero *head; hero *tail; int totalwarrior = 0; FILE *fwarrior; char filename[256]; char *buffer = NULL; size_t newLen; printf("Name of Roster File for Warriors?(without .extension): \n"); scanf("%s",&amp;filename); strcat(filename,".txt"); fwarrior = fopen(filename,"r"); if (fwarrior != NULL) { /* Go to the end of the file. */ if (fseek(fwarrior, 0, SEEK_END) == 0) { /* Get the size of the file. */ long bufsize = ftell(fwarrior); if (bufsize == -1) { printf("Error in reading the size of file"); } /* Allocate our buffer to that size. */ buffer = malloc(sizeof(char) * (bufsize + 1)); /* Go back to the start of the file. */ if (fseek(fwarrior, 0, SEEK_SET) == 0) //So is this the right way to use fseek? { /* Read the entire file into memory. */ size_t newLen = fread(buffer, sizeof(char), bufsize, fwarrior); if (newLen == 0) { fputs("Error reading file", stderr); } else { buffer[newLen] = '\0'; /* Just to be safe. */ } } } while(fgets(buffer, sizeof buffer, fwarrior) != NULL) { if(13 == sscanf(buffer,"%s[^,] , %s[^,] , %d , %d , %lf , %d , %lf , %d , %lf , %d , %d , %lf , %lf", &amp;curr[totalwarrior]-&gt;name,&amp;curr[totalwarrior]-&gt;title,&amp;curr[totalwarrior]-&gt;encoding,&amp;curr[totalwarrior]-&gt;startstr,&amp;curr[totalwarrior]-&gt;incstr,&amp;curr[totalwarrior]-&gt;startdex,&amp;curr[totalwarrior]-&gt;incdex,&amp;curr[totalwarrior]-&gt;startintel,&amp;curr[totalwarrior]-&gt;incintel,&amp;curr[totalwarrior]-&gt;basemindmg,&amp;curr[totalwarrior]-&gt;basemaxdmg,&amp;curr[totalwarrior]-&gt;bat,&amp;curr[totalwarrior]-&gt;basearmor)) { if (head == NULL) { head = curr[totalwarrior]; } else { tail-&gt;next=curr[totalwarrior]; } tail = curr[totalwarrior]; if (head!=NULL) { curr[totalwarrior] = head; do { printf("%s\n%s\n%d\n%d\n%.1lf\n%d\n%.1lf\n%d\n%.1lf\n%d\n%d\n%.1lf\n%.1lf\n\n",curr[totalwarrior]-&gt;name,curr[totalwarrior]-&gt;title,curr[totalwarrior]-&gt;encoding,curr[totalwarrior]-&gt;startstr,curr[totalwarrior]-&gt;incstr,curr[totalwarrior]-&gt;startdex,curr[totalwarrior]-&gt;incdex,curr[totalwarrior]-&gt;startintel,curr[totalwarrior]-&gt;incintel,curr[totalwarrior]-&gt;basemindmg,curr[totalwarrior]-&gt;basemaxdmg,curr[totalwarrior]-&gt;bat,curr[totalwarrior]-&gt;basearmor); curr[totalwarrior] = curr[totalwarrior]-&gt;next = curr[totalwarrior+1]; curr[totalwarrior] = NULL; printf("Before Total %d\n",totalwarrior); totalwarrior++; printf("Now Total %d\n",totalwarrior); }while(curr[totalwarrior-1] != NULL); } free(curr[totalwarrior]); } } } } //I created a typedef struct named curr that is in the form of array. It is legit. //I do not know the limit of the file so that's why I am trying to use the function above to get the size of the file in order to use `sscanf`. //I made the code `13 == sscanf(...)` because within the file, there will be multiple "sets" of data that are in the set of 13 variables. Everytime when the program reads the 13th variable, I will add counter to `[totalwarrior]` of the typedef struct named `curr`. </code></pre> <p>Here is the sample file that the program will read:</p> <pre><code>Relay Chestdrop Snow Damsel 230 16 1.7 16 1.6 21 2.9 38 44 1.7 1.24 Linnea Reversa Vanquisher 214 18 1.5 16 1.5 27 3.2 40 58 1.7 1.24 Kyle Hoarder 255 19 1.7 20 1.9 22 2.5 35 41 1.7 1.8 Leo Wiccan Monster 236 16 1.7 15 1.5 22 3 42 48 1.7 1.1 Changer Changer 191 19 2 24 3 17 1.5 37 46 1.6 1.36 Consortio Piercoptic Elvish Sharpshooter 177 16 1.7 21 2.9 15 2.6 36 42 1.7 1.94 Tinklez Osteoarcher 149 15 1.6 22 3 16 1.55 37 43 1.7 2.08 Weeeeheeee-urrr Silhouette Devil 180 15 2 20 2.9 18 2 35 41 1.7 1.8 Deckard Haemofoot Bovine Captain 71 24 2.3 14 1.5 23 1.6 47 57 1.7 2.96 Shelgar Blessed Hero 92 21 2.4 20 2.4 18 1.5 42 51 1.6 1.8 Tomahawk Genghis Tycoon 120 25 2.5 20 2.2 18 1.6 49 53 1.7 1.8 Beelzebub Ruinbearer 108 26 3.2 11 0.9 13 2.1 53 69 1.7 0.54 </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload