c-Do/while循环中的分段故障



我有一个添加新联系人并将其存储在文件中的功能,它也将存储在链接列表中。我有一个do/while循环来检查用户输入的电话号码是否已经可用,但我在这个循环中出现了分段故障

void addContact(contactPtr *sPtr)
{
FILE *fptr;
contactPtr checkPtr = *sPtr;
contactPtr crntPtr=checkPtr;
contactPtr prevPtr;
contactPtr newPtr;
int check = 0;
newPtr = (Contact *)malloc(sizeof(Contact));
printf("Enter contact name: ");
fflush(stdin);
gets(newPtr->name);
do
{
checkPtr=crntPtr;
check=0;
printf("Enter contact number: ");
fflush(stdin);
gets(newPtr->phoneNum);
for (checkPtr; checkPtr != NULL; checkPtr = checkPtr->next)
{
if (strcmp(checkPtr->phoneNum, newPtr->phoneNum) == 0)
{
printf("Phone No is already availablen");
check = 1;
break;
}
}
} while (check);
fprintf(fptr, "n%sn", newPtr->name);
fprintf(fptr, "%sn", newPtr->phoneNum);
checkPtr = crntPtr;
while (checkPtr != NULL)
{
crntPtr = checkPtr;
checkPtr = checkPtr->next;
}
while (crntPtr != NULL && (strcmp(newPtr->name, crntPtr->name) > 0))
{
prevPtr = crntPtr;
crntPtr = crntPtr->next;
}
if (prevPtr == NULL)
{
newPtr->next = *sPtr;
*sPtr = newPtr;
}
else
{
prevPtr->next = newPtr;
newPtr->next = crntPtr;
}
}
FILE *fptr;

您从未打开过指向fptr所指向的文件的流。

使用:

fprintf(fptr, "n%sn", newPtr->name);
fprintf(fptr, "%sn", newPtr->phoneNum);

调用未定义的行为

打开一个带有fopen()的文件,检查返回的值是否为空指针,在这种情况下,我们有一个错误例程:

FILE *fptr = fopen("file.txt", "w");
if (!fptr)
{
perror("fopen() failed");
exit(EXIT_FAILURE);
}

此外,当不再需要时,您需要通过fclose(fptr);关闭流。


fflush(stdin);刷新stdin在大多数实现下调用也是未定义的行为。

使用fflush(stdin(特别是这个答案可以很好地解释它。


gets()不应使用。这很危险。请改用fgets()

为什么gets函数如此危险以至于不应该使用它?

相关内容

  • 没有找到相关文章

最新更新