C语言 扫描失败,总线错误

fjaof16o  于 2022-12-11  发布在  其他
关注(0)|答案(2)|浏览(202)

我在使用C时遇到了以下错误:

#include <stdio.h>
int main ()
{
 char* foo;
 scanf("%s", foo);
 printf("entered %s", foo);
 return 0;
}

scanf接受指针,foo是指针,但我得到总线错误。我如何使它工作?

rggaifut

rggaifut1#

你从来没有初始化过foo,所以它指向内存中的一个或多或少随机的位置。

char foo[10];

或者在堆上分配内存:

char *foo = (char *)malloc(10 * sizeof(char));

但是如果你使用malloc,不要忘记free()。
并注意缓冲区溢出;如果某个函数接受了一个缓冲区,但没有最大值,要非常小心。例如,可以通过执行%9sscanf指定最大长度。但是scanf不会考虑终止空值,因此需要传递比缓冲区长度小1的值。

oymdgrw7

oymdgrw72#

关于Bus error: 10的含义:
SIGBUS(10)/总线错误10表示如果试图访问地址空间之外的存储器,则会向应用程序发送一个信号。这可能是由于错误的指针中包含无效地址。

相关问题