将getchar()的结果分配给结构成员指针

时间:2019-10-27 04:02:18

标签: c getchar

我一直在尝试创建一个将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;
   }
}

我不知道问题出在哪里,但是有人可以帮助我解决该问题吗?

2 个答案:

答案 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限制的区域。发生这种情况时,您会遇到细分错误。

相关问题