2012-10-19 18 views
6

Bu kod çalıştırıldığında aşağıdaki hatayı alıyorum:std :: basic_string türünü char türlerinden birine nasıl dönüştürebilirim?

syslog(LOG_ERR | LOG_USER, "%s",errorString); 

> argüman için '2' için ' 'const char *' için '{aka const std :: basic_string} const dizesini' dönüştürülemiyor

void syslog (int, const char *, ...)' inServer.cpp/PeCounter
hat 478 C/C++ sorun

kullanarak stdio outputted zaman sadece iyi bir program ve ErrorString değeri baskılar Daemonizing am cout, ancak bir syslog çağrısı kullanırken yazdırmaz.

std :: basic_string (char) 'const char' biçiminde olsun.

+1

Kendi yanıtınızı göndermek burada kesinlikle kabul edilebilir. Daha sonra düzenlemeyle bile sorunuza eklemeniz gerekmez. –

cevap

4

c_str() veya data() üye işlevi dizesini içeren char_type bir dizinin ilk elemana bir işaretçi sunar: İşte

fazla bilgi içeren bir sitedir. String nesnesinin kendisi geçerli ve değişmeden kaldığı sürece geçerlidir (ancak yeniden tahsisatlara neden olabilecek işlemlerin işaretleyiciyi geçersiz kılabileceğinden emin olun - saklamamayı en iyi şekilde).

+2

Sadece 'c_str()', dizenin sonunda bir sonlandırıcıyı garanti eder. 'data(), dizenin sonlandırılmamış bir kopyasına işaret edebilir; bu, çoğu const için' const char * 'beklemesi tehlikesi vardır. –

+3

@AdrianMcCarthy: Kullandığınız C++ sürümüne bağlı olarak değişir. C++ 11 'de()' de nul sonlandırılır (ve boş dizilerde bile geçerli olduğu garanti edilir). Böylece, C++ 11'de 'c_str()' ve 'data()' arasındaki tek fark, gerçekten çok önemlidir. –

+0

@Matthieu M .: Haklısınız - Speklerin önceki versiyonuna bakıyordum. Yine de, eski kütüphaneleri kullanan birçok insan var, bu yüzden ayrım önemli olabilir. Ayrıca 'c_str()', niyetin biraz daha düşündürücüdür. –

İlgili konular