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



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

#include <stdio.h>
#include <stdlib.h>
int my_strcmp(char*, char*);
int main()
{
    int a, n;
    printf("enter the length of stringsn");
    scanf("%d",&n);
    getchar();
    char *s1 = (char *)malloc(n * sizeof(char));
    printf("enter the string1n");
    fgets(s1, n, stdin);
    getchar();
    char *s2 = (char *)malloc(n * sizeof(char));
    printf("enter the string2n");
    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失败

代码可以这样修改。

getchar(); //Fix
fgets(s1, n, stdin);
getchar();
char *s2 = (char *)malloc(n * sizeof(char));

设置从用户获取n=n+1。这是处理''字符

相关内容

  • 没有找到相关文章

最新更新