【发布时间】:2017-07-02 21:44:44
【问题描述】:
我正在尝试将 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() 会显示各种返回值?
请帮忙。
【问题讨论】:
-
%sofscanf不包含空格。 -
您尝试打印 b 吗?
-
打印
b永远不会成功,除非您使用不同的文本进行测试,并且只有一个单词。如果您输入“Hello world”并询问b,您将收到“Hello”作为回答。 -
@DavidBowling
scanf("%99[^\n]", b);在用户只输入"\n"时也是一个问题。 -
@DavidBowling 问题是人们经常期望
b[]更新了其中的数据。而像'\n'这样的输入不会发生。是的,检查scanf()的返回值是很好的编程来检测这种情况。