C - strcmp不适用于scanf()

时间:2017-07-02 21:44:44

标签: c scanf

我正在尝试将scanf()与strcmp一起使用。但是,它不起作用。我已经包含了正确的头文件。我试过了gets()。它有效,但我不想容易受到缓冲区溢出攻击。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main() {
    char a[100] = "Hello World!";
    char b[100];

    scanf("%s", &b);

    if(strcmp(a, b) == 0) {
        printf("This should work!\n");
    }
}

我编译程序。然后,键入Hello World!进入该计划。它不会显示消息。另外,为什么strcmp()会向我显示各种返回值?

请帮忙。

1 个答案:

答案 0 :(得分:2)

阅读scanf上的手册 - 你会看到它在找到的第一个空格处停止扫描%s

scanf("%s", b);

的     Hello World

会为您Hello而非Wolrd

另请注意,scanf同样容易受到缓冲区溢出的影响,因为您仍然没有限制%s中输入的大小 - 限制您应该尝试的输入%99s以确保您是不读取超过100字节的缓冲区仍然会为空终止提供空间。

根据this问题,您需要类似

的内容
scanf("%[^\n]",str)

要读取换行符的所有内容,并将其与长度限制相结合,您需要类似

的内容
scanf("%99[^\n]",str)