这个问题可以作为所有常见问题的参考:
当我将数据复制/扫描到未初始化指针所指向的地址时,为什么会出现神秘崩溃或"分段错误"?
例如:
char* ptr;
strcpy(ptr, "hello world"); // crash here!
Run Code Online (Sandbox Code Playgroud)
要么
char* ptr;
scanf("%s", ptr); // crash here!
Run Code Online (Sandbox Code Playgroud) fgets()和 和有什么区别gets()?
当用户点击“输入”时,我试图打破循环。它与 配合得很好gets(),但我不想使用gets()。我尝试使用fgets()andscanf()但没有得到与使用相同的结果gets()。fgets()无论用户在文本中输入什么,都会打破循环!这是我的代码:
void enter(void)
{
int i,
for(i=top; i<MAX; i++)
{
printf(".> Enter name (ENTER to quit): ");
gets(cat[i].name);
if(!*cat[i].name)
break;
printf(".> Enter Last Name: ");
scanf("%s",cat[i].lastname);
printf(".> Enter Phone Number: ");
scanf("%s",cat[i].phonenum);
printf(".> Enter e-Mail: ");
scanf("%s",cat[i].info.mail);
printf(".> Enter Address: ");
scanf("%s",cat[i].info.address);
printf("\n");
}
top = i;
}
Run Code Online (Sandbox Code Playgroud) 关于字符指针以及它们是如何工作的我不太清楚.
程序构建,但在运行时崩溃.
char *ab = NULL;
//ab = "abc123"; // works fine
sprintf(ab, "abc%d", 123); // this line seems to crash the program
Run Code Online (Sandbox Code Playgroud)
当sprintf接受(char*str)作为第一个参数时,我不明白这是怎么回事.
有人可以向我解释一下吗?