我正在尝试将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()会向我显示各种返回值?
请帮忙。
答案 0 :(得分:2)
阅读scanf上的手册 - 你会看到它在找到的第一个空格处停止扫描%s
scanf("%s", b);
的 Hello World
会为您Hello
而非Wolrd
另请注意,scanf同样容易受到缓冲区溢出的影响,因为您仍然没有限制%s中输入的大小 - 限制您应该尝试的输入%99s
以确保您是不读取超过100字节的缓冲区仍然会为空终止提供空间。
根据this问题,您需要类似
的内容scanf("%[^\n]",str)
要读取换行符的所有内容,并将其与长度限制相结合,您需要类似
的内容scanf("%99[^\n]",str)