2010-03-02 100 views
0

聽起來很容易,但是我有一個bug,我不確定是什麼原因造成的?將一個數組中的char值賦值給另一個數組中的char值

nopunccount = 0; 
char *ra = new char[sizeof(npa)]; 
while (nopunccount <= strlen(npa)) { 
    ra[nopunccount] = npa[strlen(npa) - nopunccount]; 
    nopunccount++; 
} 

RA從來沒有得到一個值,它和我覈實,新人民軍的char值在nopunccount範圍內提供。

任何幫助表示讚賞// :)

+0

現在是'npa'聲明?什麼是「strlen(npa)」?請發佈工作代碼。 – 2010-03-02 09:45:59

+0

char * npa = new char [sizeof(str)]; (str *) – Spanky 2010-03-02 09:47:48

+0

這是一個問題:'sizeof(str)'會產生錯誤的結果(即它會產生一個指針的大小,*不是*字符串的長度) !)。 – 2010-03-02 09:56:42

回答

4

nopunccount起始爲0,因此在循環的第一次迭代中,分配給ra[0]的字符是npa[strlen(npa)]。這是該字符串的終止'\0'。因此,ra中的結果字符串以'\0'開頭,因此被認爲在通常的字符串函數的第一個字節處結束。

+0

Groovy,不知道你不能有一個空值中間字符串,但這是非常有意義的。謝謝:) – Spanky 2010-03-02 09:52:58

+0

根據定義,以null結尾的字符串不能在字符串中間有空,因爲null結束了字符串... – 2010-03-02 11:11:19

2

什麼的npa樣子的聲明?如果它是一個指針,則sizeof(npa)將是指針的大小,而不是分配的大小。如果這些字符串是零終止字符串(也稱爲「C字符串」),則使用strlen而不是sizeof。如果這些不是字符串,你需要跟蹤你在一個單獨的變量中分配了多少。

我對此代碼有一些其他批評,可能與您的問題無關。

while (nopunccount <= strlen(npa)) { 

strlen是O(n)操作。該代碼將遍歷每個循環迭代中的字符串npa。最好只計算一次。

ra[nopunccount] = npa[strlen(npa) - nopunccount]; 

同樣的問題在這裏。

+0

謝謝,好點:) – Spanky 2010-03-02 09:55:53

相關問題