Here is the code that is giving me the error of Segmentation fault..
void hire_skill()
{
int linec = 0;
FILE *p;
p = fopen("/home/suraj/Coding/PBL/Details/hiree.txt", "r");
if (p == NULL)
{
printf("\nFile did not open\n");
}
char c;
c = fgetc(p);
while (c != EOF)
{
if (c == '\n')
{
linec ;
}
c = fgetc(p);
}
fclose(p);
printf("\nNumber of lines :\t%d\n", linec);
FILE *ptrr;
ptrr = fopen("/home/suraj/Coding/PBL/Details/hiree.txt", "r");
if (ptrr == NULL)
{
printf("\nFile did not open\n");
}
rewind(ptrr);
for (int i = 0; i < linec; i )
{
fscanf(ptrr, "%s", hiree_login[i].name);
fscanf(ptrr, "%d", hiree_login[i].age);
fscanf(ptrr, "%s", hiree_login[i].gender);
fscanf(ptrr, "%d", hiree_login[i].uid);
fscanf(ptrr, "%s", hiree_login[i].skill);
fscanf(ptrr, "%lld", hiree_login[i].phno);
}
for (int i = 0; i < linec; i )
{
printf("\n%s, %d, %s, %d, %s, %lld\n", hiree_login[i].name, hiree_login[i].age, hiree_login[i].gender, hiree_login[i].uid, hiree_login[i].skill, hiree_login[i].phno);
}
fclose(ptrr);
}
And here is the structure i'm using to get values from the file and store it
struct hireeLogin
{
int age;
char name[20];
char gender[1];
int uid;
char skill[20];
long long int phno;
} hiree_login[MAX1]; //MAX1 = 50..
The whole code is on my github account : https://github.com/Suru-web/PBL/blob/main/Emp.c
I tried a few irrelevant things, but none of them worked. maybe i dont know much about this, so i would like anyone to help me fix my code. Thank you!!
CodePudding user response:
gender
is an array of size 1 and can therefore hold a string of up to length 0. In the line fscanf(ptrr, "%s", hiree_login[i].gender);
, scanf
is probably writing more than zero characters into the buffer, so the behavior is undefined.
Never use "%s"
in a format string. Always use a width modifier that is no more than one less than the size of the buffer.
CodePudding user response:
In this line ,
fscanf(p, "%s", hiree_login[i].name);
File pointer p
is already closed. You may need to use ptrr