2016-08-03 3 views
-2

Я не буду использовать эту команду для компиляции:"нет новой строки в конце файла" C

gcc –Werror –std=c99 client.c –o client

КОД:

#include <string.h> 
#include <stdio.h> 
#include <strings.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <netdb.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 


#define BUFFER_SIZE 1000 
#define PORT_NUM 8888 

void error(char *msg) 
{ 
    perror(msg); 
    exit(0); 
} 

int main(int argc, char *argv[]) 
{ 
    int sockfd, portno, n; 

    struct sockaddr_in serv_addr; 
    struct hostent *server; 
    char buffer[BUFFER_SIZE]; 

    if (argc < 3) { 
     fprintf(stderr,"usage %s hostname port\n", argv[0]); 
     exit(0); 
    } 
    portno = atoi(argv[2]); 

    sockfd = socket(AF_INET, SOCK_STREAM, 0); 
    if (sockfd < 0) 
     error("ERROR opening socket"); 

    server = gethostbyname(argv[1]); 
    if (server == NULL) { 
     fprintf(stderr,"ERROR, no such host\n"); 
     exit(0); 
    } 

    bzero((char *) &serv_addr, sizeof(serv_addr)); 
    serv_addr.sin_family = AF_INET; 
    bcopy((char *)server->h_addr, 
     (char *)&serv_addr.sin_addr.s_addr, 
     server->h_length); 
    serv_addr.sin_port = htons(portno); 
    if (connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr)) < 0) 
     error("ERROR connecting"); 

    while (1) 
    { 
     bzero(buffer, BUFFER_SIZE); 
     fgets(buffer, BUFFER_SIZE, stdin); 
     if((strncmp(buffer,"close",5) == 0)) 
      break; 
     printf("Please enter the message: "); 
     bzero(buffer, BUFFER_SIZE); 
     n = write(sockfd,buffer,strlen(buffer)); 
     if (n < 0) 
      error("ERROR writing to socket"); 
     bzero(buffer, BUFFER_SIZE); 
     n = read(sockfd,buffer, BUFFER_SIZE-1); 
     if (n < 0) 
      error("ERROR reading from socket"); 
     printf("%s\n",buffer); 
    } 

    close(sockfd); 

    return 0; 

} 

Попытка собрать его в раковине на VM WHOS OS is linux Эта ошибка сводит меня с ума, я не понимаю, что делать, чтобы исправить это. Я думал, что файл client.c поврежден, поэтому я скопировал и вложил в новый .c файл. Когда это не удалось, я написал его с 0 и все еще получаю эту ошибку.

Заранее благодарен!

+3

Вы пытались следовать совету и добавлять новую строку в конце файла? – Olaf

+0

Я не перемещал отредактированный файл в общий каталог. Я составлял тот же файл. Aaaaaaaaargh! –

ответ

2

Текст не всегда согласны на ли \n символ разделитель строки или терминатор линии - разница в том, будет ли последняя строка в файле должна сопровождаться \n характер или нет.

Я никогда не видел, чтобы GCC жаловался на это, но вы не указали, откуда на самом деле происходит ошибка.

У вас должна быть возможность исправить ситуацию, просто нажав ENTER после последней строки в вашем файле.

В качестве альтернативы вы можете открыть и сохранить файл с помощью редактора, такого как Vim, который считает его строкой terminator.

Для сравнения, большинство инструментов UNIX также рассматривают терминатор линии \n и включают его после последней строки. Это позволяет использовать файл cat без искажения следующего (например, другого файла, приглашения оболочки и т. Д.)

+0

Не уверен, но я думаю, что у меня есть небольшая память о чтении чего-то о gcc, требующем LF на последней строке. Не уверен, когда это было, однако, могло быть хорошо> 10 лет назад. В любом случае, я ожидаю, что он устареет сейчас, но поскольку мой редактор настроен так, чтобы добавить новую строку, это никогда не происходило со мной. – Olaf

1

Add Enter (новая строка) за закрывающей скобкой. программы обработки

Смежные вопросы