输出与 c 中的 strcmp() 函数不匹配



为了通过strcmp()函数比较两个字符串,我通过fgets()cin获取了一个输入字符串,另一个在函数中作为默认参数给出。但是当我通过strcmp()比较它们时,功能输出不匹配。

    char a[20];
    int b;
    cin>>a;
    b=strcmp(a,"ab");
    cout<<b;

其中我将输入a作为abb的值为 0,这完全没问题。但是,当fgets()采用相同的输入时strcmp()则输出与以前不同。

char a[20];
    int b;
    fgets(a,sizeof(a),stdin);
    b=strcmp(a,"ab");
    cout<<b;

其中a 的值为 abb 的值为 1。为什么?这是编译器问题还是别的什么?

fgets() 不会去除任何换行符,根据第 7.21.7.2 节 fgets C标准的功能:

fgets函数读取的最多比 由stream指向的流中的n指定的字符 进入s指向的数组。 不读取其他字符 在换行符(保留)之后或文件结尾之后。 空字符在读取最后一个字符后立即写入 到数组中。

最新更新