Hello.
I'm making a small application to make permutations of strings in order to find any anagrams. These permutations are then checked against a dictionary file using fgets. It compiles nicely but when it is run it just crashes.
Here is the entire source code but I suspect only the "checkDict" function is faulty because everything runs just fine when I comment it out.
Code:
#include <stdio.h>
#define VERSION 0.7
#define MAX_DICT_LEN 100
#define MAX_RESULTS 10
int maxResultsCounter = 0;
char *temp;
FILE *dict;
// check current permutation against entire dict.txt
void checkDict(char *str){
while(fgets(temp, MAX_DICT_LEN, dict) != NULL)
if(strcmp(str, temp) == 0){
printf("%s\n", str);
maxResultsCounter++;
}
}
// swap *first and *second
void swap(char* first, char* second){
char temp = *second;
*second = *first;
*first = temp;
}
// compute permutations
int perm(char* set, int begin, int end){
int i, c = 0, range = end - begin;
if(range == 1){
// MAX_RESULTS invariant
if(maxResultsCounter > MAX_RESULTS)
return 0;
//checkDict(set);
}
else
for(i = 0; i < range; i++){
swap(&set[begin], &set[begin+i]); // first swap
perm(set, begin+1, end); // recursion
swap(&set[begin], &set[begin+i]); // swap back
}
return 0;
}
int main(int argc, char *argv[]){
// test arguments
if(argc == 1 || argc > 3){
printf("AnagramAnalyzer (v. %2.1f)\n\n", VERSION);
printf("syntax: \n\t* <anagram> <args>\n\n");
printf("args: \n\t[-s] adds a space to the anagram\n");
return 0;
}
char *in = argv[1];
// convert to lower case
int i, len = strlen(in);
for(i = 0; i < len; i++)
if(in[i] > 64 && in[i] < 91)
in[i] += 32;
// check for additional arguments
if(argc == 3 && strcmp(argv[2], "-s") == 0){
in[len] = ' ';
in[len+1] = '\0';
len++;
}
// open file stream
if((dict = fopen("dict.txt", "r")) == NULL){
printf("Couldn't locate dict file!\n");
return 0;
}
// permutate and check dictionary
printf("Checking...\n");
perm(in, 0, len);
// stop and close
fclose(dict);
return 0;
}