我正在製作一個簡單的程序,它允許我通過向公用成員函數發送一個字符數組來設置對象的名稱,該公共成員函數隨後更改名爲name的私有變量。然後我告訴我的班級吐出名稱變量,以便我可以看到它是否正常工作 - 但是我的輸出大部分出現亂碼。顯示來自對象的字符數組
即我輸入
「蘋果」
和輸出成爲
「AAAAA╠╠╠╠Apple」
我注意到,當我改變單詞時,重複字符的數量模仿了數字這個詞中的字符 - 但我似乎無法弄清楚我在哪裏搞亂了我的程序。這是我的代碼:
*注意:下面的代碼現在按預期工作。
#include <iostream>
#include <cstring>
using namespace std;
class Item{
public:
~Item() { delete [] name; }
char *setName(char * inputName)
{
name = new char[strlen(inputName)+1];
int n = 0;
for(n = 0; n<strlen(inputName); n++)
name[n] = inputName[n];
name[n] = '\0';
return name;
}
private:
char *name;
};
int main()
{
char objectname[] = "Apple";
Item Apple;
cout << Apple.setName(objectname);
int input;
cin >> input; //pause program
}
你永遠不會爲'name'分配內存。另外,'char name []'應該是'char * name',因爲'char name []'是一個零大小的數組,在C++中是非法的。 – 0x499602D2
簡化你的生活,改爲使用'std :: string'。 –
@ThomasMathews我試圖避免在這個程序中使用字符串類。 – Durgal