提问者:小点点

Sprintf和concatenate[closed]


为什么当我执行sprintf(响应,“%s:%d\n”,查询,结果)时,我的输出看起来是这样的:

16 easeFrequency HIV 1-1-2003 1-1-2005 Greece

/diseaseFrequency HIV 1-1-2003 1-1-2005 Greece  16

 16 easeFrequency HIV 1-1-2003 1-1-2005 Greece 

如果我将格式更改为sprintf(response,“%d:%n\n”,query,result),并在txt文件中的每个查询末尾添加1个空格,则输出变为:

16 /diseaseFrequency HIV 1-1-2003 1-1-2005 Greece
16 /diseaseFrequency HIV 1-1-2003 1-1-2005 Greece
16 /diseaseFrequency HIV 1-1-2003 1-1-2005 Greece
16 /diseaseFrequency HIV 1-1-2003 1-1-2005 Greece
16 /diseaseFrequency HIV 1-1-2003 1-1-2005 Greece

提示:来自TXT的查询为红色。 每个查询都用新行分隔。

query_txt.示例:

/diseaseFrequency HIV 1-1-2003 1-1-2005 Greece 
/diseaseFrequency HIV 1-1-2003 1-1-2005 Greece 
/diseaseFrequency HIV 1-1-2003 1-1-2005 Greece 
/diseaseFrequency HIV 1-1-2003 1-1-2005 Greece
/diseaseFrequency HIV 1-1-2003 1-1-2005 Greece

我这样读取txt文件:

while(fgets(buffer,MAX_MESSAGE,fp)){
    command = strtok(buffer,"\n");    
    queries[i] = malloc(MAX_MESSAGE*sizeof(char));
    memset(queries[i],0,MAX_MESSAGE);
    memcpy(queries[i++],command,strlen(command));
    line_temp++;
}

共1个答案

匿名用户

我是这样读txt的。

while(fgets(buffer,MAX_MESSAGE,fp)){

command = strtok(buffer,"\n");    
queries[i] = malloc(MAX_MESSAGE*sizeof(char));
memset(queries[i],0,MAX_MESSAGE);
memcpy(queries[i++],command,strlen(command));
line_temp++;
}

结果只是一个字符串数字,每次查询响应到来时,我都会

result+=atoi(query_answer)

编辑:在strtok中使用\r\n可以解决这个问题。 如果有人能向我解释为什么这能解决这个问题,我会解释的