【发布时间】:2015-03-23 15:17:57
【问题描述】:
#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS
int main(){
const char* a = 0;
const char* b = "Georgi";
printf("Hello, write your name!\n");
scanf_s("%s", &a);
if (a = b){
printf("\nHi,",b ,", its nice to see you my friend.");
}
else{
printf("\nHello, its nice to meet you. My name is Supa-Dupa Computer!");
}
getchar();
return 0;
}
所以我试图让程序在插入特定名称后返回有意义。 第一次工作,但是当我输入“Georgi”时,它给我打印了“else”的感觉。现在,当我只输入一个符号时,程序就会退出。有什么建议我哪里出错了吗?
【问题讨论】:
-
您有未定义的行为(
a在您读入它时未初始化)并且您正在比较指针(改用strcmp。) -
分配与比较第 810 轮。
-
这应该是 C 还是 C++?在任何一种语言中,您都需要
==而不是=进行比较;但即使你解决了这个问题,你也不能用它来比较讨厌的 C 风格的字符串。要么使用 C++ 库std::string,要么使用 C 库strcmp(在 C 中,您还需要为a提供一个指向的数组,并在输入过长时以某种方式避免溢出。) -
如果 MSVC 没有在
if (a = b)上发出警告,我会感到非常惊讶。如果您将来使用scanf_s,除了确保您提供的内容可以实际写入(字符串文字不能)之外,请注意实际传递正确的类型。%s需要char *,而不是const char **。您也没有传入缓冲区大小,并且该函数的文档指出这是必要的。