C中的一些递归,字符数组和strcpy

时间:2017-02-01 10:00:16

标签: c arrays pointers recursion

今天我遇到了一个我觉得我没有完全理解的练习。这是它:

UnauthorizedAccessException

现在我的问题都是关于第一个电话: typedef struct n { char c[8]; struct n *next; } node;   nodo * f( node * x, char * s ) { nodo * n; if( strlen(s) > 0 ) { n = (node *) malloc(sizeof(node)); n->next = x; strcpy( n->c, s++ ); n->c[1] = '\0'; *(n->c) += strlen(s); return f( n, s ); } return x; }    void printr( node * r ) { if( r ) { printf("%s", r->c); printr( r->next ); } }   int main() { char p[] = "AMNG" ; printr( f( NULL, p ) ); return 0; } 到底意味着什么?我读它就像'拿字符串" MNG"并将其复制到n-> c。是不是?

然后我们有strcpy( n->c, s++ );使n-> c(作为字符串)" M / 0 G" 。 n->c[1] = '\0';也不清楚。我知道如果我给一个角色添加一个数字会发生什么,但我对这个特定情况下的使用感到非常困惑。

感谢帮助人员,非常感谢!

1 个答案:

答案 0 :(得分:1)

第一个电话strcpy( n->c, s++ );只需将s复制到n->c,直到找到空字符,然后递增s。它完全等同于

strcpy( n->c, s );
s++;

作为后增量运算符s++在递增之前返回s 的值(而不是返回增量的预增量++s值)。 n->c的内容现在是AMNG\0

第二行n->c[1] = '\0'有效地将复制的字符串缩短为1个字符长,n->c等于A\0NG\0,作为以空字符结尾的C字符串,显示为"A"

最后,*(n->c) += strlen(s)相当于n->c[0] += strlen(s),因为取消引用数组相当于访问其第一个元素,因此添加了ASCII编码字符'A' strlen(s),这是3并将n->c[0]变为'D'(请参阅http://www.asciitable.com/)。

现在重复此过程,直到s为空并且节点向后链接,每个节点包含1个字符的字符串,将N个字符的字符串转换为N个链接的节点(按相反顺序)。