該表達式正確嗎?活動數據複製
{
char a;
char *temp;
for(int j = 0; j < len; j++)
{
strcpy(&temp[j], (char*)a);
}
}
在此代碼中a
由用戶輸入/關鍵筆劃在外部進行更新。我想將所有傳入/更新的a
作爲整個字符串複製到temp
。
該表達式正確嗎?活動數據複製
{
char a;
char *temp;
for(int j = 0; j < len; j++)
{
strcpy(&temp[j], (char*)a);
}
}
在此代碼中a
由用戶輸入/關鍵筆劃在外部進行更新。我想將所有傳入/更新的a
作爲整個字符串複製到temp
。
由於 'a
'不是以空字符結尾,並且您希望在字符串緩衝區中分配單個字符,您可以執行:
int const buffer_size = 5;
char a = 'c';
char *temp = new char[buffer_size]; // Remember to allocate your string buffer
temp[index] = a;
// .....
delete[] temp; // free buffer.
index
是一個int
,您可以使用它來跟蹤緩衝區中的下一個位置。
沒有幾個原因:
temp
將不會被初始化,它指向一些隨機的位置,並沒有爲它分配任何內存,所以你要好好地寫在隨機部分的內存(和/或崩潰)。a
是一個單一的char
,你使用strcpy
(我假設你的意思是(char*)&a
,它仍然是錯誤的)將它看作字符串的值(char*
)。strcpy
繼續對從源(a
)到目的地複製char
s,至它擊中源中'\0'
......這可能是任何地方,因爲a
是不是NUL結尾的字符串但char
。如果你想要寫/追加單char
爲字符串/緩衝器你只是做buffer[position] = character
,其中buffer
是char[]
或char*
指向分配的內存的塊,position
是在位置緩衝區你要堅持的char
和character
顯然是char
。
無論如何,我不知道你在做什麼,或者你爲什麼試圖做任何你想要做的事情的邏輯背後的邏輯。
編輯:,你也有這個標記爲C++,你爲什麼不使用std::string
和std::cin
如果你實際上是使用C++?
你的代碼是錯誤在很多方面:
你不能投一個char爲char *。 你必須做這樣的事情:(char *)&a;
既然a
是一個char,你不需要投它。
你不需要strcpy
它。你可以這樣做: temp[j] = a;
char *temp
沒有關聯的內存分配給它。所以,你需要做這樣的事情:char *temp = malloc(sizeof(char) * len);
完整的代碼在這裏:
{
char a = myFunToGetInput();
char *temp = malloc(sizeof(char) * len));
for(int j = 0; j < len; j++) {
temp[j] = a;
}
}
或者,如果你已經使用memset的面前:在你的榜樣
{
char a = myFunToGetInput();
char *temp = malloc(sizeof(char) * len));
memset(temp, (unsigned char)a, len);
}
@ObscureRobot:您可以使用[名稱](地址)格式在註釋中進行命名鏈接。 – Mankarse
這是StackOverflow的代碼中的一個錯誤,它會自動將簡短的答案轉換爲註釋。我以爲我已經刪除了該評論,我再次刪除它。 – ObscureRobot