2013-10-30 90 views
0

將值複製到char指針時出現此問題。 如果我寫複製C++ char指針

char* data = "abcdef"; 
char* d; 

d[0] = data[0]; 
d[1] = data[1]; 
d[2] = data[2]; 
d[3] = data[3]; 
printf("%s ", d); 

輸出是abcd 但如果與 一本替換最後一個塊循環基本上是等效的,它打印出什麼

for(int i = 0; i < 4; i++) { 
    d[i] = data[i]; 
} 

誰能請解釋一下是不同的?

+5

既然你已經標記了這個'C++',你可能想要開始研究'std :: string','std :: cout'等。否則,這段代碼非常「C」。 – crashmstr

回答

9

兩個程序都有undefined behaviour因爲你還沒有爲d分配的內存。他們可以以任何他們喜歡的方式自由行事,包括你描述的方式。

爲了解決這個問題:

  1. d分配存儲器;
  2. 確保你寫了一個NUL終止符到d

P.S.將字符串文字分配給非const變量的方式在C++中不再有效。使用

const char* data = "..."; 
^^^^^ 

P.P.S.由於您已將標記爲[c++]的問題,因此應該使用std::string而不是原始C字符串。

+3

對於printf()調用,即使內存已分配,幾乎可以肯定會超出範圍。 –

+0

@PaulGriffiths:很好,謝謝! – NPE

+0

感謝您的回答,但我已經看到一個類似這樣的例子。 char * c =「string one」; c =「另一個字符串」;所以我認爲它在旅途中分配內存,用char指針 – patentul