2015-02-17 64 views
-3

我想從1D字符數組中構建一個2D數組,其中每次遇到換行符時,該字(包括換行符)被複制到二維數組元素中。這裏是代碼,這正是我需要的,但我對此有幾點疑問。有人可以向他解釋這段代碼的工作原理嗎?

讓我提醒你,這只是我的程序 中代碼的一部分,所以numChars只是chars數組中的字符數。 numWords只是我擁有的單詞數量。 和單詞被聲明爲char **單詞。

int k=0; 
int i=0; 

char** words = (char**) malloc(sizeof(char*) * numWords); 
words[k] = chars; 
while(i < numChars) 
{ 
    if(chars[i] == '\n') 
    { 
     k++; 
     words[k] = (chars+i+1); 
    } 
    i++; 
} 

問題1:第一個words[k] = chars做什麼? 問題2:有人可以向我解釋這條線是如何工作的words[k] = (chars+i+1);

非常感謝你,並且對於菜鳥問題​​感到抱歉。

+0

請發表[MCVE](http://stackoverflow.com/help/mcve)。幾乎不可能提出任何有用的代碼段。 – 2015-02-17 21:40:00

+1

我們不知道第一個答案,因爲我們看不到字符是什麼 – pm100 2015-02-17 21:40:11

+0

當您逐步完成代碼時,調試器顯示了什麼? – 2015-02-17 21:40:22

回答

0

如果我假設字符是輸入字符

words[k] = chars; 

的陣列設置的第一個字指針,以指向與輸入的第一字符。這將是更清晰的寫

words[0] = chars; 

下一個

words[k] = (chars+i+1); 

設置的第k個字指針在第i + 1字的字符點。這實際上不會做你所需要的,因爲各種字指針指向正確的起始字符,但是對於每個「字」沒有終止的'\ 0'。所以,如果你printf每個字[你]會得到

the cat sat on the mat 
cat sat on the mat 
sat on the mat 
.... 
+0

謝謝你的回答。\ 0終止是我實際得到的問題之一,因爲In我給出的任務,出於某種原因,他們希望我將\ 0作爲常規字符,而不是用於終止的NULL字符。 – user1335175 2015-02-17 22:22:30

相關問題