我试图读取这样的文件:
nInp=20
nOut=1
NLaye=3
hid=30
er=0.001
epo=100
epoRep=100
pscpa=0
tip=Aggr
net=emi
numPrec=0.25
prec=NH3;NOX;PM10;SO2;VOC
rag=4
我必须只读取=
之后的值,并且使用prec
的值,我必须将每个值(用;
分隔)与新行然后我将它们写入一个新文件,如:
NH3
NOX
PM10
SO2
VOC
在等于symbolt之后阅读没有问题,但我无法将price
分开。
这是我的功能:
void settaggiRete(char values[20][50]){
char line[50];
int i = 0, j = 0;
char str[10][20];
FILE *conf = fopen("conf.txt", "r");
if(conf == NULL){
printf("Impossibile apripre il file conf\n");
exit(EXIT_FAILURE);
}
//Ciclo sulle linee del file di configurazione
while(fgets(line, sizeof(line), configRete) != NULL){
// Leggo i valori contenuti dopo =
if(i==10){
char * str = values[10];
sscanf(line, "%*[^=]=%s", values[i]);
while ((token = strsep(line, ";")) != NULL){
str[j] = token;
j++;
}
}else{
sscanf(line, "%*[^=]=%s", values[i]);
}
i++;
}
fclose(configRete);
}
那么如何分离这些值?
答案 0 :(得分:0)
你不能像这样分配给数组
str[j] = token;
试
strcpy(str[j], token);
虽然这样做很危险,所以你可以
size_t length = strlen(token);
if (length >= sizeof(str[j]))
length = sizeof(str[j]) - 1;
memcpy(str[j], token, length);
str[j][length] = '\0';
请注意,您正在编写安全代码,但需要修改令牌,因此更好的方法是使用动态分配。
您还在循环内重新声明了str
,因此请删除此行
char * str = values[10];
这可能是错误的,具体取决于您如何声明values
。
答案 1 :(得分:0)
在主要分开。
像这样:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void settaggiRete(char values[20][50]){
char line[50];
int i = 0;
FILE *conf = fopen("conf.txt", "r");
if(conf == NULL){
printf("Impossibile apripre il file conf\n");
exit(EXIT_FAILURE);
}
while(fgets(line, sizeof(line), conf) != NULL){
sscanf(line, "%*[^=]=%49s", values[i++]);
}
fclose(conf);
}
int main(void){
char values[20][50] = {{0}};
char *value11[25];
int i, v11 = 0;
settaggiRete(values);
for(i=0;i<20;i++){
if(!*values[i])
break;
if(i==11){
char *token, *p = values[11];
int j = 0;
while(token = strsep(&p, ";")){
value11[v11++] = token;
}
for(j = 0; j < v11; ++j){
printf("values[11][%d]=%s\n", j, value11[j]);
}
} else {
printf("values[%d]=%s\n", i, values[i]);
}
}
return 0;
}