Эта функция использует fgets
для ввода данных из файла и сохранения их в структуре. Я получаю ошибку сегментации, и я не могу понять, почему. Программа не будет работать, поэтому я не смог отладить. Вот код для функции:ошибка сегментации с помощью fgets из входного файла в C
void getInventory(NodeT **ppRoot, char *pszInventoryFileName)
{
char szInputBuffer[100]; // input buffer for reading data
int iScanfCnt; // returned by sscanf
FILE *pfileInventory; // Stream Input for Inventory data.
Stock *pNew = NULL;
/* open the Inventory stream data file */
if (pszInventoryFileName == NULL)
exitError(ERR_MISSING_SWITCH, "-i");
pfileInventory = fopen(pszInventoryFileName, "r");
if (pfileInventory == NULL)
exitError(ERR_INVENTORY_FILENAME, pszInventoryFileName);
/* get inventory data until EOF
** fgets returns null when EOF is reached.
*/
while (fgets(szInputBuffer, 100, pfileInventory) != NULL)
{
iScanfCnt = sscanf(szInputBuffer, "%6s %ld %lf %30[^\n]\n"
, pNew->szStockNumber
, &pNew->lStockQty
, &pNew->dUnitPrice
, pNew->szStockName);
if (iScanfCnt < 4)
exitError(ERR_INVALID_INVENTORY_DATA, "\n");
if (pNew == NULL)
exitError("Memory allocation error", "");
printT(insertT(*ppRoot, *pNew));
}
}
В printT
и insertT
функции являются рекурсивными, но программа не до того, как дойти до этого. И вот данные из входного файла:
PPF001 100 9.95 Popeil Pocket Fisherman
SBB001 300 14.95 Snuggie Brown
SBG002 400 14.95 Snuggie Green
BOM001 20 29.95 Bass-O-Matic
MCW001 70 12.45 Miracle Car Wax
TTP001 75 9.95 Topsy Turvy Planter
NHC001 300 9.95 Electric Nose Hair Clipper
SSX001 150 29.95 Secret Seal
Почему этот код дает мне ошибку сегментации?
BTW 'nsertT (* ppRoot * pNew)': первый аргумент типа может 'NODET * * ' – BLUEPIXY
« Код не запускается, поэтому я не могу отлаживать », но он * делает *, но вы не получите ошибку во время выполнения! Вы запутываете «бег» с «компиляцией» или что-то в этом роде? – usr2564301