如何从另一个文本文件

时间:2016-08-22 10:28:53

标签: c string fopen fgets

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; 

}

在上面的代码中,它是在IP和PORT值之后添加换行符,这是一个不正确的URL构造。如何在连接之前避免换行 client.conf包含

IP:10.12.130.216
Port:5200

预期结果:

http://10.12.130.216:5200/

获得结果:

http://10.12.130.216
:5200
/

2 个答案:

答案 0 :(得分:1)

read_conf可以使用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;
}

答案 1 :(得分:0)

如果您确定它是新行,请使用:

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

或分别对IP和PORT字符串使用strtock函数。