今天我遇到了一个我觉得我没有完全理解的练习。这是它:
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';
也不清楚。我知道如果我给一个角色添加一个数字会发生什么,但我对这个特定情况下的使用感到非常困惑。
感谢帮助人员,非常感谢!
答案 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个链接的节点(按相反顺序)。