我想从控制台应用程序中读取一个字符串并进行比较:
#include "string.h"
#include "stdio.h"
#include "stdafx.h"
char* answer;
int _tmain(int argc, _TCHAR* argv[])
{
printf("(yes/no):");
scanf("%s", &answer);
if (answer=="yes")
{
printf("Yes");
}
else
{
printf("Exiting...");
}
return 0;
}
当我放Exiting...
时,我总是收到消息yes
。我怎么可能读到yes
的正确值但是比较没有检测到 - answer=="yes"
- ?
还试过这个:
#include "string.h"
#include "stdio.h"
#include "stdafx.h"
char answer[100];
int _tmain(int argc, _TCHAR* argv[])
{
printf("(yes/no):");
scanf("%s", answer);
if (!strcmp(answer,"yes"))
{
printf("Yes");
}
else
{
printf("Exiting...");
}
return 0;
}
这使我成为"Exiting..."
的第二个选项。这里有什么错误?
答案 0 :(得分:5)
代码中的许多问题
1)您没有为answer
分配内存。做
answer = malloc(100);
不要忘记稍后free(answer)
。
OR
您也可以直接使用数组,因为您不需要动态内存
char answer[100];
<小时/> 2)您需要
char *
到printf()
而不是char **
。做
scanf("%s", answer);
<小时/> 3)使用
strcmp
比较字符串,而不是==
。
if (!strcmp(answer, "yes")
{
printf("Yes");
}
!
因为strcmp
在0
匹配时返回string
。
<小时/> 4)您还应该检查返回值,例如
scanf()
。
if (scanf("%s", answer) != 1)
{
printf("scanf failed");
exit(0);
}
<小时/> 5)您还应该提及
char
要读取的scanf()
个数,以避免缓冲区溢出。
scanf("%99s", answer)
对于char array[100]
大小为100
的人,应该99
为空字符\0
保留位置。
答案 1 :(得分:0)
要比较字符串,您应该使用strcmp()
。
那就是说,answer
没有分配内存。在实际使用answer
之前,您需要使用数组或使用动态内存分配来获取分配给它的正确内存。
基本上,扫描语句应该看起来像
scanf("%s", answer);
事先将适当的内存分配给answer
。