LINUX.ORG.RU

lvalue required as left operand of assignment (C)


0

0

Бодрый день всем!
я не очень силен в Сях, но вот потребовалось собрать простенькую прогу, написанную под БСДю в Линухе. привожу кусочек кода:

#cat cpmail.c
/*==================*/
#include <sys/types.h>
#include <errno.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include «libmilter/mfapi.h»

#define CP_FROM

#define copy_to_addr «fsb-eprst»
#define conf_file «/etc/mail/copyusers»

typedef struct
{
   char *e_mail;
   struct copy_users *next;
}
copy_users;

copy_users *cp_users;
int copy;

void get_cp_users()
{
   char line[256];
   copy_users *tmp, *head;
   FILE *file;
   
   cp_users = malloc(sizeof(copy_users));
   cp_users -> next = NULL;
   head = cp_users;
   
    if(!(file = fopen(conf_file,«r»)))
    {
    fprintf(stderr,«Can't open config file: %s\nError: %s\n»,conf_file, strerror(errno));
    exit(1);
    }

    while(fgets(line,sizeof(line),file) != NULL)
    {
      //Ignore '#' character
       if(strncmp(line, «#», 1) == 0)
       continue;
      
      cp_users -> e_mail = (char *)malloc(strlen(line));
      bzero(cp_users -> e_mail, strlen(line));
      strncpy(cp_users -> e_mail, line, strlen(line) - 1);

       tmp = cp_users;
      cp_users = malloc(sizeof(copy_users));
      cp_users -> next = NULL;
      (copy_users *)tmp -> next = cp_users; //строка с ошибкой

    }
    fclose(file);
   
    cp_users = head;
}
/*=====================*/
# gcc -Wall -o cpmail cpmail.c /usr/lib/libmilter.a -pthread
cpmail.c: В функции ‘get_cp_users’:
cpmail.c:54: ошибка: lvalue required as left operand of assignment

запутался я здесь. помогите разобраться с кодом - очень нужно это собрать


((copy_users *)tmp) -> next = cp_users; //строка с ошибкой

Не помню точно что там с приоритетом каста и оператора ->, но лучше использовать принудительное расставление приоритетов с помощью скобок.

tia ()

tmp->next = cp_users;

anonymous ()
Ответ на: комментарий от anonymous

Не стоит запутывать человека. А то так сейчас сами перепишете за него код, а потом ещё рассказывай что такое ООП, класс etc.

tia ()
Ответ на: комментарий от tia

ООП и классы здесь ни при чем.
это понятно tmp -> next = cp_users;
смутило это (copy_users *).
а для начала надо было структуру обозвать
typedef struct copy_users
{
char *e_mail;
struct copy_users *next;
}
copy_users;
вот теперь работает. всем спасибо!

huan ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.