gpt4 book ai didi

c - 不使用标准库函数的字符串比较

转载 作者:太空宇宙 更新时间:2023-11-04 08:38:25 25 4
gpt4 key购买 nike

我是 C 编程的新手。这只是一个初学者的问题。我试图在不使用标准函数的情况下实现字符串比较。这里我使用了动态内存分配并使用了 fgets()。但是没有输入第二个字符串。谁能帮我指出问题?代码如下。

#include <stdio.h>
#include <stdlib.h>

int my_strcmp(char*, char*);

int main()
{
int a, n;
printf("enter the length of strings\n");
scanf("%d",&n);
getchar();

char *s1 = (char *)malloc(n * sizeof(char));
printf("enter the string1\n");
fgets(s1, n, stdin);
getchar();

char *s2 = (char *)malloc(n * sizeof(char));
printf("enter the string2\n");
fgets(s2, n , stdin);

if (s1 == NULL)
{
printf("malloc error!!");
}

if (s2 == NULL)
{
printf("malloc error!!");
}

a = my_strcmp( s1, s2);

if (a == 0)
{
printf("the strings are equal");
}
else
{
printf("the strings are not equal");
}
free (s1);
free (s2);
return 0;
}

int my_strcmp( char *s1, char*s2)
{
while (*s1)
{
if (*s1 == *s2)
{
s1++;
s2++;
}
else
break;
}

if ( *s1 == *s2)
{
return 0;
}
else if (*s1 > *s2)
{
return 1;
}
else
{
return -1;
}
}

最佳答案

fgetsn 参数是缓冲区的大小包括空终止符。因此,它最多读取 n - 1 个字符,并用空终止符填充最后一个位置。您第二次调用 getchar(在第一个 fgets 之后)然后读取最后一个字符,不是换行符,所以第二次调用 fgets 提前停止,因为它会立即遇到换行符。

相反,您需要为每个字符串分配 n + 1 个字符,并使用 n + 1 调用 fgets

另外,您应该在尝试写入s1s2 之前检查malloc 失败。

关于c - 不使用标准库函数的字符串比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25081636/

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