为了通过strcmp()
函数比较两个字符串,我通过fgets()
和cin
获取了一个输入字符串,另一个在函数中作为默认参数给出。但是当我通过strcmp()
比较它们时,功能输出不匹配。
char a[20];
int b;
cin>>a;
b=strcmp(a,"ab");
cout<<b;
其中我将输入a
作为ab
,b
的值为 0,这完全没问题。但是,当fgets()
采用相同的输入时strcmp()
则输出与以前不同。
char a[20];
int b;
fgets(a,sizeof(a),stdin);
b=strcmp(a,"ab");
cout<<b;
其中a
的值为 ab
,b
的值为 1。为什么?这是编译器问题还是别的什么?
fgets()
不会去除任何换行符,根据第 7.21.7.2 节 fgets
C标准的功能:
fgets
函数读取的最多比 由stream
指向的流中的n
指定的字符 进入s
指向的数组。 不读取其他字符 在换行符(保留)之后或文件结尾之后。 空字符在读取最后一个字符后立即写入 到数组中。