2016-08-03 14 views
-2

Ich verwende diesen Befehl zu kompilieren:"kein Newline am Ende der Datei" C

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

Code:

#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; 

} 

Der Versuch, es in einer Shell auf VM whos OS zu kompilieren ist Linux Dieser Fehler macht mich verrückt, ich verstehe nicht, was zu tun ist, um dies zu beheben. Ich dachte, dass die Datei client.c beschädigt ist, also habe ich kopiert und in eine neue .c-Datei eingefügt. Als das fehlschlug, schrieb ich es von 0 und bekam immer noch diesen Fehler.

Vielen Dank im Voraus!

+3

Haben Sie versucht, den Ratschlag zu befolgen und einen Zeilenumbruch am Ende der Datei hinzuzufügen? – Olaf

+0

Ich habe die bearbeitete Datei nicht in das freigegebene Verzeichnis verschoben. Ich habe die gleiche Datei kompiliert. Aaaaaaaaargh! –

Antwort

2

Textverarbeitungsprogramme stimmen nicht immer, ob ein \n Zeichen Zeilentrenn oder Leitungsabschluss - wobei der Unterschied darin, ob die letzte Zeile in einer Datei sollte von einem \n Zeichen oder nicht gefolgt werden.

Ich habe nie gesehen, dass GCC sich darüber beschweren, aber Sie haben nicht angegeben, woher der Fehler tatsächlich kommt.

Sie sollten in der Lage sein, die Situation zu korrigieren, indem Sie einfach nach der letzten Zeile in Ihrer Datei die EINGABETASTE drücken.

Alternativ können Sie öffnen, und sie speichern die Datei mit einem Editor wie Vim, die es als eine Zeile Terminator betrachtet.

Zum Vergleich betrachten die meisten UNIX-Tools auch \n einen Leitungsabschluss und schließen ihn nach der letzten Zeile ein. Dies ermöglicht eine cat eine Datei ohne zu korrumpieren was auch immer folgt (z. B. eine andere Datei, die Shell-Eingabeaufforderung usw.)

+0

Nicht sicher, aber ich denke, ich habe eine schwache Erinnerung daran, etwas über gcc zu lesen, das LF auch in der letzten Zeile benötigt. Nicht sicher, wann es war, könnte gut sein vor> 10 Jahren. Wie auch immer, ich würde erwarten, dass es jetzt veraltet ist, aber da mein Editor so konfiguriert ist, dass er sowieso einen Zeilenumbruch hinzufügt, ist es mir nie aufgefallen. – Olaf

1

Hinzufügen Geben Sie (neue Zeile) hinter der schließenden Klammer ein.

Verwandte Themen