打印指针信息时出现段错误(核心已转储)

Segmentation fault(core dumped) when printing pointer's information

我正在读取输入并将其放入指针中。我用过 malloc 所以我不确定哪里错了

代码:

#define BUFFER 30 //in my .h file

char *inStr;
inStr = malloc(sizeof(char*)*BUFFER);
scanw("%s", &inStr);
inStr[strlen(inStr)] = '[=10=]';
mvwprintw(stdscr, 0, 0, "%s",inStr);

我正在尝试将它输出到 ncurses 板上,但不确定为什么会这样。当我按 enter 输入

时它崩溃了

更改为:

malloc(sizeof(char)*BUFFER)

第一项,对于“%s”格式,您需要传递一个指向缓冲区的指针。您实际上是将指针传递给指向缓冲区的指针。删除 &。其次,strlen 是由末尾存在的 null 定义的,因此使用它来确定将 null 放在哪里有点荒谬。相反,您必须信任 scanw 才能正确终止它。请注意,这是一个巨大的假设,也是为什么整个 scanf 系列都受到缓冲区溢出困扰的重要原因——该函数不知道缓冲区有多大。另外,正如其他人指出的那样,您的 malloc 大小已关闭 - 您可能只想要 malloc(BUFFER) 之类的东西 - 注意 sizeof(char) 根据定义为 1。

char *inStr;
inStr = malloc(BUFFER);
scanw("%s", inStr);
mvwprintw(stdscr, 0, 0, "%s",inStr);