Selamlar. C'de amacım kulanıcıdan okunan veri önceden oluşturulan dosyadaki örneğiyle karşılaştırılacak. Örnek dosya oku.dosya:
	
	
	
	
	
		
Eşleşirse cikti adında ayrı dosyaya duruma göre tek ya da sıralı şekilde yazdırılacak. Kodun dosyadan okuma, eşleştirme ve dosyaya yazan fonksiyonlarında hiçbir sorun yok. Mesela ben 3. satırı ara değişkeni içinde aradığımda ba karşılığını sorunsuz bir şekilde arıyor ve cikti dosyasına yazıyor:
	
	
	
	
	
		
Sorun şu ki tek seferde ya da 9 gibi küçük sayılar verdiğimde sorun çıkmıyor ama 9999 kez dosyaya yaz dediğimde Segmentation fault hatası alıyorum. BUFFER_SIZE değerini arttırdım ama işe yaramadı. buf ve key değişkenlerini her işlemden sonra free ve memset komutlarıyla sıfırladım ama yine işe yaramadı. Her seferinde 1 kez dosyaya yaz dememe rağmen yine hata alıyorum. Bir fikri olan var mı? Teşekkürler.
	
	
	
	
	
		
	
		
			
		
		
	
				
			
		Kod:
	
	testkod = 1 aa
testkod = 2 ab
testkod = 3 ba
testkod = 4 bbEşleşirse cikti adında ayrı dosyaya duruma göre tek ya da sıralı şekilde yazdırılacak. Kodun dosyadan okuma, eşleştirme ve dosyaya yazan fonksiyonlarında hiçbir sorun yok. Mesela ben 3. satırı ara değişkeni içinde aradığımda ba karşılığını sorunsuz bir şekilde arıyor ve cikti dosyasına yazıyor:
		Kod:
	
	ba
ba
ba
ba
ba
ba
ba
ba
baSorun şu ki tek seferde ya da 9 gibi küçük sayılar verdiğimde sorun çıkmıyor ama 9999 kez dosyaya yaz dediğimde Segmentation fault hatası alıyorum. BUFFER_SIZE değerini arttırdım ama işe yaramadı. buf ve key değişkenlerini her işlemden sonra free ve memset komutlarıyla sıfırladım ama yine işe yaramadı. Her seferinde 1 kez dosyaya yaz dememe rağmen yine hata alıyorum. Bir fikri olan var mı? Teşekkürler.
		C:
	
	#include <stdio.h>
#include <string.h>
#define BUFFER_SIZE 1000
char key[255];
char buf[255];
char* get_key(char key_number[256]);
char* return_line(int line);
int indexOf(FILE *fptr, char *word, int *line, int *col);
int return_line_number(char *word);
int main(int argc, char** argv) {
        FILE *f;
        char ara[] = "3";
        f = fopen("cikti", "w");
        int i;
        //printf("%s", get_key(ara));
        for(i=0; i<9; i++) {
                if(strcmp(get_key(ara), "1") == 0)
                        fprintf(f, "aa\n");
                if(strcmp(get_key(ara), "2") == 0)
                        fprintf(f, "ab\n");
                if(strcmp(get_key(ara), "3") == 0)
                        fprintf(f, "ba\n");
                if(strcmp(get_key(ara), "4") == 0)
                        fprintf(f, "bb\n");
        }
        fclose(f);
        return 0;
}
char* get_key(char key_number[256]) {
        int d = 0;
        while(key[d]!=0) {
                key[d] = 0;
                d++;
        }
        int number_line;
        char word[256] = "testkod = ";
        strcat(word, key_number);
        //printf("%s\n", word);
        char line[256] = "";
        number_line = return_line_number(word);
        strcpy(line, return_line(number_line));
        //printf("%i\n", return_line_number(word));
        //printf("%s", line);
        int a = 0, b = 0;
        while(line[a]!='=') {
                //printf("%c", line[a]);
                a++;
        }
        a += 2;
        //printf("\n");
        while(line[a]!=' ') {
                key[b] = line[a];
                a++;
                b++;
        }
        //printf("%s\n", key);
        return key;
}
char* return_line(int line) {
        //printf("%i\n", line);
        int end, loop;
        FILE *fp = fopen("oku.dosya", "r");
        for(end=loop=0; loop<line; loop++) {
                if(0==fgets(buf, sizeof(buf), fp)) {
                        end = 1;
                        break;
                }
        }
        fclose(fp);
        if(!end)
                return buf;
}
int return_line_number(char *word) {
        int line; int col;
        FILE *fptr;
        fptr = fopen("oku.dosya", "r");
        return indexOf(fptr, word, &line, &col);
}
int indexOf(FILE *fptr, char *word, int *line, int *col) {
        char str[BUFFER_SIZE], *pos;
        *line = -1, *col  = -1;
        while ((fgets(str, BUFFER_SIZE, fptr)) != NULL) {
                *line += 1;
                pos = strstr(str, word);
                if (pos != NULL) {
                        *col = (pos - str);
                        break;
                }
        }
    if (*col == -1)
                *line = -1;
        return *line+1;
} 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		