String sonunda \0 yok o yüzden herhalde.
Makarna kod yazmayın.
text'i hiçbir zaman artırmıyorsunuz ki. Sürekli aynı konuma bir şeyler yazmaya çalışıyorsunuz.
For döngünüzde ortada sadece *p1 var. Bu false döndürecek bir şey nasıl olacak?
Neden strcpy kullandığınızı tam anlamadım. Onunla bu işlemin yapılabileceğinden de pek emin değilim. İyice karışı gibi geliyor.
Sizin kodunuzu olabildiğince koruyarak bu hale getirebildim.
Kod:
#include <stdio.h>
#include <string.h>
int main() {
char* p1;
char text[100];
char harf;
char newText[100];
printf("Kelime giriniz: ");
gets(text);
char end = text[strlen(text)];
printf("Silmek istediginiz harfi giriniz: ");
scanf("%c", &harf);
int i = 0;
for (p1 = text; *p1 != end; ++p1) {
if (*p1 != harf) {
newText[i] = *p1;
++i;
}
}
printf("Harf silindikten sonra cumle: %s", newText);
return 0;
}
String sonunda \0 yok o yüzden herhalde.
Makarna kod yazmayın.
Text'i hiçbir zaman artırmıyorsunuz ki. Sürekli aynı konuma bir şeyler yazmaya çalışıyorsunuz.
For döngünüzde ortada sadece *p1 var. Bu false döndürecek bir şey nasıl olacak?
Neden strcpy kullandığınızı tam anlamadım. Onunla bu işlemin yapılabileceğinden de pek emin değilim. İyice karışı gibi geliyor.
Sizin kodunuzu olabildiğince koruyarak bu hale getirebildim.
Kod:
#include <stdio.h>
#include <string.h>
int main() {
char* p1;
char text[100];
char harf;
char newText[100];
printf("Kelime giriniz: ");
gets(text);
char end = text[strlen(text)];
printf("Silmek istediginiz harfi giriniz: ");
scanf("%c", &harf);
int i = 0;
for (p1 = text; *p1 != end; ++p1) {
if (*p1 != harf) {
newText = *p1;
++i;
}
}
printf("Harf silindikten sonra cumle: %s", newText);
return 0;
}
Sadece *p1 var çünkü "\0" olunca sıfır değeri döndürüyor boşuna neden eşittir end veya başka bir şeye eşitleyeyim? Kodumun düzgün çalışması "strcpy(p1, p1+1);" yapsam yeterli oluyor başka bir diziye ihtiyaç kalmıyor siz makarna kod yazıyorsunuz herhalde. Yukarıda belirtiğim kod neden değişik karakter bastığını merak ediyorum sadece.
Çünkü diziyi taşıyorsunuz.
Şimdi belleğimizde 100 Byte'lık yer olduğunu düşünelim. İlk 4 Byte'a "abcd" yazdık ve c harfinin silinmesini istedik. Kodunuzdaki strcpy(text+1, text); gidiyor diziyi alıyor ve kendisinin ikinci karakterinden sonrasına koymaya çalışıyor. Bu durumda abcd ifademiz aabcdd oluyor. Bence hata tamamen aynı yere atmaya çalışmanızla alakalı. Bir sonrakine yazmaya çalışıyorsunuz. Kopyalamayı ise sırayla yapmıyor gibi görünüyor. Sırayla yapsa sonsuz sayıda a içeren abcd ifadesi dönerdi. strcpy(text+1, text); yerine strcpy(text, text+1); yazdığınızda sağa kaydırmak yerine sola kaydırıyorsunuz. Bu durumda abcd ifadesi bcd ifadesine dönüşür.
Strcpy kullanmakta ısrarcı iseniz ilk döründüğü yeri tespit edip öncesini ve sonrasını 2 kere olacak şekilde ayırmanızı tavsiye ederim. Strcpy stringin tamamını kopyalıyor.
Ya da şöyle de yapabilirsiniz. Yapmak istediğinize daha uygun sanırım.