Arkadaşlar merhaba. strstr ile aynı işleve sahip bir fonksiyon yazmam gerekiyordu aşağıdaki fonksiyonu yazdım. Ama visual studio “İşlenmemiş özel durum oluştu: okuma erişimi ihlali.” şeklinde hata veriyor. Fonksiyonun hangi kısmını hatalı yazmışım yardımcı olur musunuz?
#include <stdio.h>
#include <string.h>
char* my_strstr(char* str1, char* str2){
int uzunluk=0;
int i;
int x=1; //k, hem str1/i hem str2'yi sonraki harfe geçirmek için ortak değişken.
char* p;
for(i=0;i<str2[i]!='\n';i++) uzunluk++; // strlen fonksiyonu kullanmadan str2'nin uzunluğunu buldum.
for(i=0; str1[i]!='\n'; i++){
if(str2[i] == str1[0]){ //Aranacak kelimenin ilk harfi uyuşursa aşağıdaki döngüye girecek.
p = &str1[i];
while(str2[x]!='\n' && str2[x]==str1[x+i]) x++;
// uyuşan kelime sayısı uzunluğa eşit olduğu anda döngü bitecek.
if (x == uzunluk)
return p;
}
}
return NULL;
}
int main(){
char a[] = "Bilgisayarlar";
char b[] = "lar";
printf("%s",my_strstr(a,b));
}
Evet, 1 ile 2’yi degistirince oluyor. (Yukaridaki warning’leri de hallettikten sonra.)
Buradaki akil karisikliginin sebebi de kotu isimlendirme. str1/str2 yerine samanlik/igne, i yerine de samanlik_indisi kullanilsaydi, igne[samanlik_indisi] kodunun yanlis oldugu goze batardi.
x de sonraki_kontrol_edilecek_igne_indisi olsa gerek. Oyle olsaydi sifirlanmadigi goze batardi.
Kodun son kısmında ufak bi hata vardı. Eğer str2’nin uzunluğu 1 karakter ise döngüye girmediği için NULL döndürüyordu. Bu hatayı düzelttim. Bİ şekilde ihtiyaç duyacak olan olursa aşağıya bırakıyorum, iyi forumlar.
#include <stdio.h>
#include <string.h>
char* my_strstr(char* str1, char* str2){
int uzunluk=0;
int i;
int x=1; //x, hem str1/i hem str2'yi sonraki harfe geçirmek için ortak değişken.
char* p;
for(i=0;i<str2[i]!='\0';i++) uzunluk++; // strlen fonksiyonu kullanmadan str2'nin uzunluğunu buldum.
for(i=0; str1[i]!='\0'; i++){
if(str1[i] == str2[0]){ //Aranacak kelimenin ilk harfi uyuşursa aşağıdaki döngüye girecek.
p =&str1[i];
while(str2[x]!='\n' && str2[x]==str1[x+i]){
x++;
// uyuşan kelime sayısı uzunluğa eşit olduğu anda döngü bitecek.
if (x == uzunluk)
return p;
}
if(uzunluk == 1) return p; //Aranan kelime tek karakter ise yukarıdaki While döngüsüne girmeyeceği için bu satırı ekledim.
}
}
return NULL;
}
int main(){
char a[] = "Bilgisayarlar";
char b[] = "ilgi";
printf("%s",my_strstr(a,b));
}