Я пытаюсь прочитать файл конфигурации построчно, а затем токенизировать и сохранить результат в отдельные переменные. Мой файл конфигурации выглядит следующим образом
stage 1
num_nodes 2
nonce 234567
Мне нужно токенизировать каждое значение в строке отдельно, поэтому, например, в первой строке «этап» используется для проверки, прочитал ли я значение этапа из файла конфигурации, а затем сохранил его значение в переменной. Моя токенизация работает правильно. Однако, когда я пытаюсь манипулировать своими переменными после токенизации, это дает мне ошибку сегментации. В лучшем случае я могу просто успешно манипулировать одной из переменных, то есть либо stage, либо num_nodes, либо nonce, но не их комбинацию. Даже если попытаться сделать что-то вроде
stage = stage + 1;
num_nodes = num_nodes + 1;
однако это дает ошибку сегментации, если я просто изменю одну переменную, например:
num_nodes = num_nodes + 1;
тогда он работает нормально. Я вставляю код ниже, пожалуйста, скажите мне, что мне здесь не хватает.
main(int argc, char *argv[]){
int nonce;
int num_nodes;
int stage;
char filename[256];
char *token1, *token2, *str;
FILE* fp;
char bufr[MAXLINE];
printf("Please enter config file name\n");
scanf("%s",filename);
printf("You entered %s\n", filename);
if((fp = fopen(filename, "r")) != NULL){
while(fgets(bufr, MAXLINE, fp) != NULL){
if(bufr[0] == '#') // to skip comments
continue;
printf("This is bufr: %s", bufr);
str = bufr;
for(str; ;str = NULL){
token1 = strtok(str, " ");
if(strcmp(token2, "num_nodes") == 0){
num_nodes = atoi(token1);
printf("num_nodes = %d\n", num_nodes);
}
if(strcmp(token2, "nonce") == 0){
nonce = atoi(token1);
printf("nonce = %d\n", nonce);
}
if(strcmp(token2, "stage") == 0){
stage = atoi(token1);
printf("stage = %d\n", stage);
}
token2 = token1; // making a copy of pointer
if(str == NULL){
break;
}
}//end of for loop
}//end of while loop
fclose(fp); //close the file handle
}
else{
printf("failed, file not found!\n");
}
/* This is where the segmentation fault kicks in, try to uncomment two lines and it will give a segmentation fault, if uncomment just one, then it works fine.
nonce = nonce + 2;
num_nodes = num_nodes + 1;
printf("stage = %d\n", stage);
*/
}