2016-03-21 21 views
1

Bir dizenin simgeleri arasında yineleme yapmak için strsep() işlevini kullandığımda, işaretçileri bu belirteçlere kaydetmem ve bunları daha sonra kullanmam güvenli midir? Örnek:İşaretçi değerlerini strsep() değerlerine döndürme

char str[] = "some word tokens"; 
char *sameStr = str; 
char *token, *old1, *old2; 

token = strsep(&sameStr, " "); 
old1 = token; 

token = strsep(&sameStr, " "); 
old2 = token; 

token = strsep(&sameStr, " "); 

printf("%s\n%s\n%s\n", token, old1, old2); 

Bu strsep gibi görünüyor() her zaman her belirteci sonra boş karakterler ekleyerek, özgün karakter dizisini değiştirir. Eğer öyleyse, güvenli depolama olmalı ve daha sonra old1 ve eski2 işaretçileri kullanmalı mıyım? Ayrıca, aynıStr kullanımım sorun yaratıyor mu? İşaretli str işaretçisini doğrudan strsep() kısıtlı char ** türünü beklemeden kullanamıyorum.

+0

Yalnızca *, * geçirdiğiniz dizideki içeriklerin üzerine yazdığı gibi görünüyor. Bu kesinlikle * yapar. [Bu kılavuz sayfasından] (http://man7.org/linux/man-pages/man3/strsep.3.html): "Bu simge, sınırlayıcıyı null byte ('\ 0') ile üzerine yazarak sonlandırılır." –

cevap

3

Kaydedilen işaretçiler, orijinal dize kapsam dışına çıkana kadar geçerli olacaktır. O zamana kadar bunlara erişebilirsin ama onlara ihtiyacın var. sameStr kullanımı herhangi bir soruna neden olmamalıdır.

İlgili konular