gpt4 book ai didi

c - 使用指针数学而不是数组索引

转载 作者:太空狗 更新时间:2023-10-29 16:01:52 25 4
gpt4 key购买 nike

我正在尝试解决在我的 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 ("%s\n", f(s,t,out));
return 0;
}
char *f (char s[], char t[], char out[]) {
int i;
for (i=0; s[i] == t[i]; i++)
out[i] = s[i];
out[i] = '\0';
return &out[0];
}

从代码中可以看出,这段代码使用了as return value &out[0]:是不是表示把完整的数组作为返回值?

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 ("%s\n", f(s,t,out));
return 0;
}
char *f (char s[], char t[], char out[]) {
for (; *(s+=1) == *(t+=1);)
*(out+=1) = *s;
*(out+1) = '\0';
return out;
}

这是我建议的解决方案,但建议的代码返回“ISBN-978-88”,而我的只返回“8”。该数组小于字符串的长度,建议的代码如何在没有任何溢出的情况下工作?感谢您的回复。

最佳答案

您的代码在副作用方面过于激进:应该在复制到已经输出了,不是比较之后。

此外,您需要在递增指针之前保存out 缓冲区的值,以便您可以返回指向复制字符串开头的指针。

char *orig = out;
for ( ; *s == *t ; s++, t++)
*out++ = *s;
*out = '\0';
return orig;

Demo on ideone.

关于c - 使用指针数学而不是数组索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20992321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com