2016-04-14 29 views
-2

- "hello bow are you" için bir test olarak değiştirmeye çalıştığım anda bir dizede bir metni bulmak ve değiştirmek için bir program yapmaya çalışıyorum.Değeri işaret eden değeri strstr(); C

Yani öncelikle ben şimdi nasıl gelecek 3 harf değiştirmek için hiçbir fikrim yok "(this position)how are you" bir gösterici ile döner char *substring = strstr(mystring, newstr); kullanarak "how" bulabilirsiniz. Ben "how" değiştirerek dize uzunluğu için strlen(newstr) yapabilirsiniz, ancak işaretçi newstr başlayarak mystring değiştirmek için bir yol bulamıyorum.

+4

'* alt dize = 'b';' – EOF

+0

@GeorgeStocker Bu nasıl soru çok geniştir? Yeni başlayanların sorusunu anlamak makul ve kolaydır. –

+0

@JohnKugelman "Eğer okuyabileceğim bir şey varsa heyecanlanırdım." ve "Bir program yapmaya çalışıyorum, ama aslında kodumu, hatanın nerede olduğunu görmen gerektiğini bütünüyle göstermiyorum; okumak için bana bir şey verebilir misin?" –

cevap

5

Alt dizgiyi abone ederek ilk karakteri değiştirin.

substring[0] = 'b'; 

Birden karakterlerin yerini bir döngü deneyin veya memcpy kullanmak istiyorsanız. Strcpy kullanmayın: NUL terminatörünün kopyalanmasını istemezsiniz.

memcpy(substring, "how", 3); 
+0

Memcpy benimkinden daha zarif bir çözümdür. –

-2

*substring = 'b'; kullanıcı EOF tarafından gönderildi benim çözüm şekilde olduğu gibi

for (int x = 0; x < strlen(newstring); x++){ 
    *substring++ = newstring[x]; 
} 
+1

Birden çok karakteri sırayla değiştirmek isterseniz, satırı '* substring ++ = newstring [x];' olarak değiştirin. – EOF