我一直收到此错误:访问冲突位于0x40496a:写入地址0x0。我使用Borland C ++。
这是我的源代码。
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
int main()
{
char *nm;
cout<<"\n Enter a name: ";
gets(nm);
cout<<"\n Name: "<<nm;
getch();
return 0;
}
即使我设置char * nm = NULL或使用cin&gt;&gt;输入我得到相同的错误。请帮助,谢谢。
答案 0 :(得分:4)
当你声明nm
时,你没有初始化它,这意味着nm
的价值是不确定的,它并不真正指向任何地方(实际上它指向一个看似随机位置)。你需要让它指向足够大的东西来容纳你输入的字符串。
使用未初始化的变量和NULL
指针会导致undefined behavior,其最常见的结果是崩溃。
要解决此问题,请将其指向已初始化的数组:
char str[20];
char* nm = str;
或者动态地为字符串分配内存:
char* nm = new char[20];
甚至更好,不要将字符指针用作字符串,而尤其 不 gets
函数(它是危险的,甚至已经从C标准中删除了),使用C ++ std::string
类而不是std::getline
函数来获取一行:
std::string nm;
std::getline(std::cin, nm);
或者,如果您只想获得一个以空格分隔的单词,请使用普通输入运算符:
std::string nm;
std::cin >> nm;