2016-08-22 3 views
0
char IP[32] = ""; 
char PORT[4] = "0000"; 

int read_conf() 
{ 
    int i; 
    char line[25] = ""; 
    FILE *fp; 
    char *str_ptr; 

    fp = fopen("client.conf","r"); 
    for(i=1;(fgets(line,sizeof(line),fp));i++) 
     { 
     if(1==i) 
      { 
      str_ptr = strstr(line,"IP:"); 
      if(str_ptr) 
       { 
       strcpy(IP,(str_ptr+3)); 
       } 
      else 
       { 
       printf("Error in fetching IP \n"); 
       exit(0); 
       } 
      } 
     else if(2==i) 
      { 
      str_ptr = strstr(line,"Port:"); 
      if(str_ptr) 
       { 
       strcpy(PORT,(str_ptr+5)); 
       } 
      else 
       { 
       printf("Error in fetching PORT \n"); 
       exit(0); 
       } 
      } 
     } 
    return 1; 
} 

char *construct_url(int n,char * const argv[]) 
{ 
    char * final_url; 
    int i,k=2; 
    int j = 0; 
    final_url = malloc(sizeof(char *)*300); 
    strcpy(final_url,"http://"); 

    strcat(final_url,IP); 
    strcat(final_url,":"); 
    strcat(final_url,PORT); 
    strcat(final_url,"/"); 

    //printf("%s",final_url); 
    for(i=1;i<n,k>0;i++,k--) 
     { 
      strcat(final_url,argv[i]); 
      if(i==1) 
       { 
       strcat(final_url,"/"); 
       } 
      else 
       { 
       strcat(final_url,"?"); 
       } 
     } 

return final_url; 

} 

In meinem obigen Code wird eine neue Zeile nach IP und PORT-Wert hinzugefügt, die nicht korrekte URL Aufbau. Wie vermeide ich neue Zeilen vor der Verkettung?
client.confWie Newline entfernen zwischen Strings aus einer anderen Textdatei lesen

IP:10.12.130.216 
Port:5200 

Erwartetes Ergebnis bestehen:

http://10.12.130.216:5200/ 

Anfahrt Ergebnis:

http://10.12.130.216 
:5200 
/
+0

strcat (final_url, IP); \t final_url [strcspn (final_url, "\ n")] = '\ 0'; Dies funktioniert. – Chauhan

+0

'char PORT [4]' ist klein. – BLUEPIXY

Antwort

1

read_conf kann einfach wie folgt geschrieben werden mit fscanf.

char PORT[6] = "00000";//0-65535 

int read_conf(void){ 
    FILE *fp = fopen("client.conf","r"); 

    if(1 != fscanf(fp, "IP:%31s\n", IP)){ 
     printf("Error in fetching IP \n"); 
     exit(0); 
    } 
    if(1 != fscanf(fp, "Port:%5s", PORT)){ 
     printf("Error in fetching PORT \n"); 
     exit(0); 
    } 
    fclose(fp); 
    return 1; 
} 
+0

Es funktioniert nicht abholen PORT – Chauhan

+0

@Chauhan Bitte erläutern Sie die Details. Z.B. Wurde das Format der Datei geändert? – BLUEPIXY

0

Wenn Sie sicher sind, dass es sich um eine neue Linie, die Verwendung ist:

strcat(final_url,IP); 
strtok(final_url, "\n"); 
strcat(final_url,":"); 
strcat(final_url,PORT); 
strtok(final_url, "\n"); 
strcat(final_url,"/"); 

oder verwenden Sie strtock separat für IP- und PORT-Strings.

Verwandte Themen