我一直在尝试创建一个将getchar()
分配给结构成员(p_customers
的指针(last_name
)的函数,但是我一直在遇到编译器错误或分段问题故障。这是我到目前为止的内容:
/* A customer account receivable record */
struct customer
{
char last_name[MAX_NAME_LENGTH+1]; /* Customer last name */
float amount; /* Amount the customer owes */
int priority; /* Customer priority */
};
void get_customers(struct customer *p_customers_start,
int number_customers)
{
struct customer *p_customers; /* Points to the account receivable */
/* customer */
char *p_last_name; /* Points to the last name character */
/* Loop processing account receivable customer data */
for (p_customers=p_customers_start;
(p_customers-p_customers_start) < number_customers;
p_customers++)
{
/* Print out account receivable customer */
printf( "\nCustomer #%d:",
*p_customers - *p_customers_start + 1);
/* Obtain last name of customer */
printf(" \nEnter the customer's last name: ");
getchar();
do
{
p_customers->last_name++ = getchar();
}
while(*p_last_name != NEW_LINE);
p_last_name = END_OF_STRING;
}
}
我不知道问题出在哪里,但是有人可以帮助我解决该问题吗?
答案 0 :(得分:0)
您可以发布完整的代码吗?上面的代码太晦涩,无法给出任何正确分析的提示。但是,我可以根据假设做出以下评论: p_customers-> last_name和p_last_name可能不在同一位置。结果,“ last_name ++ = getchar()”继续读取字符并尝试放入超出其限制的地址。这会导致段错误。
答案 1 :(得分:0)
在数字类型上允许减法,但不能将结构彼此减去。因此,当您说“ * p_customers-* p_customers_start + 1”时,“ *p_customers_start+1" and "*p_customers - <previous_expression>
”没有意义。
例如,如果某个结构具有员工记录,那么从另一个减去一个意味着什么?
我希望您想要当前的客户编号。如果是,则只能使用“ p_customers - p_customers_start +1"
。
数组的名称是“常量指针”。因此,它永远无法更改。当您说“ p_customers->last_name++
”时,您正在尝试更改不允许的常量(指针)。
请考虑以下情况:用户首先提供NEWLINE作为姓氏,然后再提供实际的姓氏。并且如果姓氏长度大于MAX_NAME_LENGTH,您最终将覆盖超出数组last_name限制的区域。发生这种情况时,您会遇到细分错误。