我在使用C时遇到了以下错误:
#include <stdio.h> int main () { char* foo; scanf("%s", foo); printf("entered %s", foo); return 0; }
scanf接受指针,foo是指针,但我得到总线错误。我如何使它工作?
scanf
foo
rggaifut1#
你从来没有初始化过foo,所以它指向内存中的一个或多或少随机的位置。
char foo[10];
或者在堆上分配内存:
char *foo = (char *)malloc(10 * sizeof(char));
但是如果你使用malloc,不要忘记free()。并注意缓冲区溢出;如果某个函数接受了一个缓冲区,但没有最大值,要非常小心。例如,可以通过执行%9s为scanf指定最大长度。但是scanf不会考虑终止空值,因此需要传递比缓冲区长度小1的值。
%9s
oymdgrw72#
关于Bus error: 10的含义:SIGBUS(10)/总线错误10表示如果试图访问地址空间之外的存储器,则会向应用程序发送一个信号。这可能是由于错误的指针中包含无效地址。
Bus error: 10
2条答案
按热度按时间rggaifut1#
你从来没有初始化过
foo
,所以它指向内存中的一个或多或少随机的位置。或者在堆上分配内存:
但是如果你使用malloc,不要忘记free()。
并注意缓冲区溢出;如果某个函数接受了一个缓冲区,但没有最大值,要非常小心。例如,可以通过执行
%9s
为scanf
指定最大长度。但是scanf
不会考虑终止空值,因此需要传递比缓冲区长度小1的值。oymdgrw72#
关于
Bus error: 10
的含义:SIGBUS(10)/总线错误10表示如果试图访问地址空间之外的存储器,则会向应用程序发送一个信号。这可能是由于错误的指针中包含无效地址。