2015-02-17 67 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

相关问题