我是 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;
}
}
n
的fgets
参数是缓冲区的大小,包括空终止符。因此,它最多读取 n - 1
个字符,并用空终止符填充最后一个位置。您对 getchar
的第二次调用(在第一个 fgets
之后)然后读取最后一个字符,而不是换行符,因此对 fgets
的第二次调用提前停止,因为它立即遇到换行符。相反,您需要为每个字符串分配
n + 1
个字符,并使用
fgets
调用 n + 1
。此外,在尝试写入
malloc
或
s1
之前,您应该检查 s2
是否失败。代码可以这样改。
从用户处获取后设置
n=n+1
。这是为了对付
'\0'
角色
我想这里应该使用一些小的改变: 你可以这样做: