c – 使用指针数学而不是数组索引
发布时间:2020-12-16 09:49:51 所属栏目:百科 来源:网络整理
导读:我正在尝试解决我的C编程书中发现的问题. #include stdio.hchar *f (char s[],char t[],char out[]);int main(void){ char s[] = "ISBN-978-8884981431"; char t[] = "ISBN-978-8863720181"; char out[10]; printf ("%sn",f(s,t,out)); return 0;}char *f (
我正在尝试解决我的C编程书中发现的问题.
#include <stdio.h> char *f (char s[],char t[],char out[]); int main(void) { char s[] = "ISBN-978-8884981431"; char t[] = "ISBN-978-8863720181"; char out[10]; printf ("%sn",f(s,t,out)); return 0; } char *f (char s[],char out[]) { int i; for (i=0; s[i] == t[i]; i++) out[i] = s[i]; out[i] = ' '; return &out[0]; } 从代码中可以看出,此代码用作返回值& out [0]:这是否意味着完整数组用作返回值? char *f (char s[],char out[]) { for (; *(s+=1) == *(t+=1);) *(out+=1) = *s; *(out+1) = ' '; return out; } 这是我提出的解决方案,但是当建议的代码返回“ISBN-978-88”时,我的只返回“8”. 解决方法
您的代码在副作用上过于激进:= 1操作(通常简称为)操作应在复制到输出后应用,而不是在比较之后.
此外,您需要在递增指针之前保存out缓冲区的值,以便您可以返回指向复制字符串开头的指针. char *orig = out; for ( ; *s == *t ; s++,t++) *out++ = *s; *out = ' '; return orig; Demo on ideone. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |