【发布时间】:2014-02-24 02:41:50
【问题描述】:
我正在学校学习 C,我将在课堂上编写一个程序,该程序接收一个文件并将信息存储到一个结构数组中,然后使用该数组来确定是否有足够的可用库存。我尝试在全局范围内使用 struct 数组,并花了几个小时试图将它传递给函数并在 main 中声明它。但是,我仍然将分段错误视为错误,我不知道我的确切问题是什么。
typedef struct
{
char szStockNumber[7]; // Stock Number for a stock item
long lStockQty; // quantity in stock
double dUnitPrice; // price per unit of stock
char szStockName[31]; // name of the stock item
} Inventory;
#define MAX_INVENTORY 20;
void readWriteInventory(Inventory inventoryM[]);
int main(int argc, char *argv[])
{
char *pszOrderFileName = NULL;
char *pszInventoryFileName = NULL;
int rc;
Inventory inventoryM[MAX_INVENTORY];
readWriteInventory(inventoryM);
return 0;
}
void readWriteInventory(Inventory inventoryM[])
{
int iInventoryCnt = 0; // number of inventory items
char szInputBuffer[100];
char *pszGetsResult;
int iScanfCnt;
fprintf(stdout, "%-6s %-8s %-10s %-30s\n", "Stock", "Quantity", "Unit Price", "Stock Name");
/* get inventory data until EOF
** fgets returns null when EOF is reached.
** store inventory in array
*/
pszGetsResult = fgets(szInputBuffer, 100, pfileInventory);
int i;
for(i = 0; i < MAX_INVENTORY; i++)
{
if (pszGetsResult != NULL)
{
iScanfCnt = sscanf(szInputBuffer, "%6s %8ld %10lf %30[^\n]"
, inventoryM[i].szStockNumber
, &inventoryM[i].lStockQty
, &inventoryM[i].dUnitPrice
, inventoryM[i].szStockName);
// Check for bad input. scanf returns the number of valid conversions
if (iScanfCnt < 4)
exitError(ERR_INVALID_INVENTORY_DATA, szInputBuffer);
fprintf(stdout, "%6s %8ld %10.2lf %30s\n"
, inventoryM[i].szStockNumber
, inventoryM[i].lStockQty
, inventoryM[i].dUnitPrice
, inventoryM[i].szStockName);
iInventoryCnt++;
if(iInventoryCnt > MAX_INVENTORY)
exitError(ERR_TOO_MANY_STOCK_ITEMS, szInputBuffer);
pszGetsResult = fgets(szInputBuffer, 100, pfileInventory);
}
else
break;
}
}
【问题讨论】:
-
你试过使用调试器吗?
-
当您尝试将数组写入越界时,可能会发生分段错误。
-
你传递了什么输入数据?
-
您能展示一些数据文件的示例输入吗?程序是否在分段错误之前打印出任何数据?
-
请不要从您的帖子中删除代码。
标签: c arrays segmentation-fault parameter-passing typedef