Tam Sürümünü Görmek İçin : string birleştirmek
ankakusu
06/10/2007, 18:20
Tekrardan merhaba,
ben iki tane string'i birleştirmekle uğraşıyordum.
bende bir cpp kitabı var. o cstring deki fonksiyonları kullanarak
birleştirme işlemini yapmış.
Şöyle ki:
#include <cstring>
using std::strcat;
using std::strncat;
ve yazdığım mini kod da şöyle:
char str[]= "ben";
strcat(str,"sen");ama benim compiler'da bu, hata veriyor. Şu şekilde:
--------------------Configuration: chap6 - Win32 Debug--------------------
Compiling...
chap6.cpp
error C2039: 'strcat' : is not a member of 'std'
error C2873: 'strcat' : symbol cannot be used in a using-declaration
error C2039: 'strncat' : is not a member of 'std'
error C2873: 'strncat' : symbol cannot be used in a using-declaration
error C2143: syntax error : missing ')' before ';'
Error executing cl.exe.
chap6.exe - 5 error(s), 0 warning(s)kitap yanlış değil herhalde...
e compiler niye hata veriyor.
half_life
06/10/2007, 18:37
hatan şu
char str[]= "ben";
demekle sen boyutu 4 olan bir dizi tanımlamış oluyorsun ve str[3] = '\0' oluyor. Daha sonra buna strcat kullanarak başka bir string eklemek istiyorsun. Fakat yeterli alan yok hepsini zaten kullanmışsın. Onun için de program hata veriyor.
char str[8]= "ben";
strcat(str,"sen");
dizinin boyutunu girerek yukarıdaki gibi denersen sanırım sorun hallolmuş olacak.
ankakusu
06/10/2007, 19:26
yok o değil hata bak dikkat edersen verilen hatalarda
strcat fonksiyonunun std'de olmadığı yazıyor.
yani
"using std::strcat"
ifadesinden dolayı hata alıyorum...:garip:
ankakusu
06/10/2007, 19:34
sanırım problemi anladım.
ben
#include <cstring> yazmadan önce
#include <iostream>
using namespace std;
yazdığım için
using::std kullandığımda hata veriyor...
sanırım c++'da
using namespace std;
dedikten sonra tane tane
fonksiyon tanımlamamıza gerek kalmıyor...
bilgilerinize...
hatan şu
char str[]= "ben";
demekle sen boyutu 4 olan bir dizi tanımlamış oluyorsun ve str[3] = '\0' oluyor. Daha sonra buna strcat kullanarak başka bir string eklemek istiyorsun. Fakat yeterli alan yok hepsini zaten kullanmışsın. Onun için de program hata veriyor.
Böyle bir hata programın çalışma zamanında ortaya çıkacaktır. Programın derleme zamanında bir hata oluşmaz.
sanırım c++'da
using namespace std;
dedikten sonra tane tane
fonksiyon tanımlamamıza gerek kalmıyor...
using namespace direktifi ile o isimalanındaki tüm isimleri kendi isimalanınızda bilinir hale getiriyorsunuz. C++ kütüphanesindeki tüm sınıflar ve fonksiyonlar ile C++'ın C'den aldığı kütüphane std isimalanındadır.
using namespace std; bildirimini kullanıldığınızda kodda isim çakışması olasılığı yükselecektir. Çok gerekli olmadıkça kullanmanızı önermem. Hiç using veya using namespace bildirimi yapmadan da kütüphanede yer alan sınıf ve fonksiyonları std:: ön eki ile niteleyerek kullanabilirsiniz. Ayrıca, sınıf ve fonksiyonlarınızın yer alacağı bir başlık dosyası oluşturduğunuzda using namespace std; bildirimini bu başlık dosyasında yapmanızı da önermem. Çünkü, ileride o başlık dosyası bir .cpp modülünden include edildiğinde .cpp modülünüzde de std isimalanındaki tüm isimler faal olacaktır.
İyi çalışmalar.
acehreli
07/10/2007, 18:18
ankakusu, depones'in dedigi gibi, <cstring>'in strcat'i std:: alaninda tanimlamasi gerekiyor. Eger derleyicini hata veriyorsa bundan daha haberi olmadigi icin olabilir. :) Hangi derleyiciyi kullaniyorsun?
Bu sorundan kurtulmak icin <cstring> yerine <string.h> kullanir ve 'using std::strcat;' gibi satirlari bosverirsin. Cunku <string.h> o isimleri global alanda tanimlar.
Tabii C++'ta ayrica <string> oldugunu hatirlatmak gerek. Onun icindeki std::string turu + isleci ile (veya += isleci ile) string birlestirir:
std::string ben("ben");
ben += "sen"; // strcat'in esdegeri
Ali
ankakusu
22/10/2007, 08:56
bakın şöyle yazınca hata geçti...
#include <iostream>
using namespace std;
#include <cstring>
int main(int argc, char* argv[])
{
printf("Hello World!\n");
char str[10]= "ben";
strcat(str,"sen");
cout << str<<endl;
return 0;
}
yani hem dizinin boyutunu arttırınca hem de
using std::strcat ifadesini kaldırınca güzel güzel çalıştı
kod...
yardımlar için teşekkürler...
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.