【发布时间】:2016-04-25 15:13:25
【问题描述】:
为了通过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。为什么?是编译器问题还是其他问题?
【问题讨论】:
-
不是编译器问题。问题是您没有更仔细地阅读文档。 The fgets function docs。你认为第二个参数有什么作用?
-
fgets和cin>>a不会产生相同的字符串。请阅读 both 的文档以更好地了解它们的作用。 -
@PaulMcKenzie as str 将包含该换行符,因此它的值为 1。对吗?
-
@FahimFerojeAlJami - 是的,新行没有被剥离。其次,如果您编写一个循环并将
a中的每个字符输出为整数:for (int i = 0; i < strlen(a) ++i) cout << static_cast<int>(a[i]) << "\n";,您可能会自己发现这一点,然后您会看到末尾有一个不可见的控制字符。如果有一些你没有预料到的事情,那应该是你的第一步,那就是看看组成a字符串的字符是什么。 -
@PaulMcKenzie 谢谢。我明白了。