基本上,我使用strncpy
截斷字符,如果它大於字符數組大小。strncpy不能正確存儲字符C
所以,我有以下變量和方法。
char studentName[6];
char colour[5];
char music[7];
strcpy(this->studentName, "null");
strcpy(this->colour, "null");
strcpy(this->music, "null"):
void setName (char* studentName)
{
strncpy(this->studentName, studentName, 6);
this->studentName[6] = '\0'; // SET LAST TO NULL POINTER
}
void setColour (char* colour)
{
strncpy(this->colour, colour, 5);
this->colour[5] = '\0'; // SET LAST TO NULL POINTER
}
void setMusic (char* music)
{
strncpy(this->music, music, 7);
this->music[7] = '\0'; // SET LAST TO NULL POINTER
}
所以,如果我設置了學生的名字Jackson
,它將截斷至Jackso
,但是,我的colour
變量將是空白,我music
變量將是null
。
另外,如果我嘗試...
void setName (char* studentName)
{
strncpy(this->studentName, studentName, 6);
this->studentName[6-1] = '\0'; // SET LAST TO NULL POINTER
}
void setColour (char* colour)
{
strncpy(this->colour, colour, 5);
this->colour[5-1] = '\0'; // SET LAST TO NULL POINTER
}
void setMusic (char* music)
{
strncpy(this->music, music, 7);
this->music[7-1] = '\0'; // SET LAST TO NULL POINTER
}
,我設置了學生的名字Jackson
我得到這樣的Jacksonull
。它將null
添加到末尾
當你聲明'studentName [6]'時,有效指示是'[0]'到'[5]'。所以在位置'[6]'處設置''\ 0''是未定義的行爲。 – abelenky 2014-12-02 22:29:14
@abelenky,所以即使'this-> studentName [5] ='\ 0'',爲什麼它仍然會添加先前在這個數組中的null值, '傑克遜' – 2014-12-02 22:35:03
既然你沒有向我們展示過什麼地方/何時/如何調用setName,setColour和setMusic函數,這很難說。發佈更多代碼,plz。 – abelenky 2014-12-02 22:36:16