2013-11-22 115 views
0

好了,我試圖解決我的C++任務,但是當我使用strcpy_s它僅適用於我的陣列,而不是我的*指針。這裏就是我一起工作:我的strcpy_s不能用我的char *指針,爲什麼?

HotelRoom::HotelRoom(char Num[], int cap, double daily, char* name, int Stat) 
{ 
strcpy_s(room_Num, Num); //copy first argument into room_Num[] 
guest = new char[strlen(name) +1]; //create space for the name 
strcpy_s(guest, name); //copy second argument into new space 
capacity = cap; 
dailyRate = daily; 
occupancyStat = Stat; 
} 

這是以這種方式使用它時出現錯誤strcpy_s(guest,name); :

strcpy_s「沒有重載函數實例‘’相匹配的參數列表參數類型有:(字符*,字符*)」。

+1

可能是一個無用的問題,但你爲什麼不使用字符串? – Nil

+0

不同的功能簽名? http://msdn.microsoft.com/en-us/library/td1esda9(v=vs.90).aspx – kenny

+0

@Nil,因爲書籍分配說要使用char *和char [] – SyntaxEyes

回答

3

非標準strcpy_s需要一個額外的參數比std::strcpy那就是您想要複製的最大尺寸。

errno_t strcpy_s(char *s1, size_t s1max, const char *s2); 

你需要的是標準C函數std::strcpy

char *strcpy(char *s1, const char *s2); 
+0

: char * strcpy(char * s1,const char * s2); 它輸出一串符號,如「== ^&%$ @」。當我使用: – SyntaxEyes

+0

但我使用時: strcpy_s(char * s1,size_t s1max,const char * s2); 它的工作原理,但在編譯它的錯誤與「打破」錯誤,或類似的東西結束。 – SyntaxEyes

+0

@SyntaxEyes C風格的字符串需要以null結尾,確保這一點。或者更好的是,如果這是一個選項,可以使用'std :: string'。 –

1

在文檔看看:http://msdn.microsoft.com/en-us/library/td1esda9%28v=vs.90%29.aspx

時候可以因爲一個靜態大小的數組沒有被傳遞無法自動確定大小,你必須提供。

#include <string.h> 

int main() 
{ 
    char src[] = "Hello World!\n"; 
    char staticDest[100]; 
    size_t dynamicSize = strlen(src) + 1; 
    char* dynamicDest = new char[dynamicSize]; 

    //Use the overload that can determine the size automatically 
    //because the array size is fixed 
    //template <size_t size> errno_t strcpy_s(char(&strDestination)[size], const char *strSource); 
    strcpy_s(staticDest, src); 

    //Use the overload that requires an additional size parameter because 
    //the memory is dynamically allocated 
    //errno_t strcpy_s(char *strDestination, size_t numberOfElements, const char *strSource); 
    strcpy_s(dynamicDest, dynamicSize, src); 

    return 0; 
} 
+0

是不是我在這裏做的: guest = new char [strlen(name)+1]; 是不是讓指針保存名稱的空間? – SyntaxEyes

+0

不,由於您要動態分配內存,您必須告訴函數目標緩衝區有多大。如果你有一個像char s [100]這樣的靜態數組,模板化的超載可以自動確定大小。我在答案中增加了一個例子。 –

+0

OOHHH!我懂了。好吧,我用你的第二個例子的3個參數,現在編譯完成後,它彈出一個錯誤,說「斷點」,然後說,當我點擊「休息」按鈕中止。 – SyntaxEyes

0

下面應該工作:

strcpy_s(guest, strlen(name), name); //copy second argument into new space 
相關問題