我正在尝试将用户输入的字符串与文件中的字符串进行匹配。但是有两件事情是不正确的。
typedef struct
{
int yyyy;
int mm;
int dd;
} Date;
int main()
{
FILE *fp2;
fp2=fopen("StudentId.txt","r");
char input[255];
char *id;
id = (char *)malloc(sizeof(Date));
printf("Enter your UserId:\n");
gets(id);
gets(id);
fgets(input,sizeof(input),fp2);
int cmp;
printf("%s_\n%s_\n",input,id );
return 0;
}
首先,我必须使用两个get(id)而不是一个,因为程序似乎跳过了第一个。第二,在得到存储后的打印结果是这样的
Aditya828
_Aditya828_
这让我很奇怪,为什么它存储的输入是'\n',而id却不是。有什么办法解决这个问题吗?
为什么它存储的是
input
带着'\0'
和id
不。
这个结论曲解了结果。
两种 id
和 input
结尾处有一串 null chracter '\0'
. input
也有 '\n'
作为 fgets()
保留线路进给。 gets()
不保留。
有什么办法可以解决这些问题吗?
避免 gets()
. 它是 坏的.
而不是使用 fgets()
阅读 id
.
使用一个缓冲区,其大小基于文本重排,即 id
,而不是尺寸的大小 Date
. 慷慨一点
#define ID_MAX_SIZE 40 // Expected max size
char id[ID_MAX_SIZE * 2]; // Be generous. Later code can trucate if needed.
if (fgets(id, sizeof id, stdin)) {
id[strcspn(id, "\n")] = '\0'; // Lop off potential \n
printf("id: <%s>\n", id);
}