加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读