这是给我分段错误的代码。
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);
}
这是我用来从文件中获取值并存储它的结构
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
我尝试了一些不相关的东西,但没有一个工作。也许我不知道这方面的很多,所以我希望任何人能帮助我修复我的代码。谢谢!!
2条答案
按热度按时间a1o7rhls1#
gender
是一个大小为1的数组,因此可以保存最大长度为0的字符串。在行fscanf(ptrr, "%s", hiree_login[i].gender);
中,scanf
可能向缓冲区写入了多于零个的字符,因此该行为未定义。切勿在格式字符串中使用
"%s"
。始终使用比缓冲区大小小不超过1的宽度修饰符。ggazkfy82#
在这条线上,
文件指针
p
已关闭。您可能需要使用ptrr