2011-11-08 77 views
0

該表達式正確嗎?活動數據複製

{ 
    char a; 
    char *temp; 
    for(int j = 0; j < len; j++) 
    { 
     strcpy(&temp[j], (char*)a); 
    } 
} 

在此代碼中a由用戶輸入/關鍵筆劃在外部進行更新。我想將所有傳入/更新的a作爲整個字符串複製到temp

+0

@ObscureRobot:您可以使用[名稱](地址)格式在註釋中進行命名鏈接。 – Mankarse

+0

這是StackOverflow的代碼中的一個錯誤,它會自動將簡短的答案轉換爲註釋。我以爲我已經刪除了該評論,我再次刪除它。 – ObscureRobot

回答

1

由於 '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,您可以使用它來跟蹤緩衝區中的下一個位置。

0

沒有幾個原因:

  • temp將不會被初始化,它指向一些隨機的位置,並沒有爲它分配任何內存,所以你要好好地寫在隨機部分的內存(和/或崩潰)。
  • a是一個單一的char,你使用strcpy(我假設你的意思是(char*)&a,它仍然是錯誤的)將它看作字符串的值(char*)。
  • strcpy繼續對從源(a)到目的地複製char s,至它擊中源中'\0' ......這可能是任何地方,因爲a不是NUL結尾的字符串char

如果你想要寫/追加單char爲字符串/緩衝器你只是做buffer[position] = character,其中bufferchar[]char*指向分配的內存的塊,position是在位置緩衝區你要堅持的charcharacter顯然是char

無論如何,我不知道你在做什麼,或者你爲什麼試圖做任何你想要做的事情的邏輯背後的邏輯。

編輯:,你也有這個標記爲C++,你爲什麼不使用std::stringstd::cin如果你實際上是使用C++?

0

你的代碼是錯誤在很多方面:

  1. 你不能投一個char爲char *。 你必須做這樣的事情:(char *)&a;既然a是一個char,你不需要投它。

  2. 你不需要strcpy它。你可以這樣做: temp[j] = a;

  3. 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); 
} 
+0

哦對!我錯過了所有其他錯誤:D – mtahmed

+1

這對於C來說是一個很好的答案。在C++中,使用'std :: string'來避免內存泄漏。 –

+0

最近一直和C一起工作,所以它卡在我的腦海裏。謝謝你的提示。 – mtahmed