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

时间:2015-02-11 23:20:52

标签: c string input ncurses

我正在读取输入并将其放入指针中。我使用过malloc,所以我不确定是什么错误

CODE:

#define BUFFER 30 //in my .h file

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

我试图将它输出到ncurses板上,我不确定为什么会这样。当我按Enter键输入

时崩溃

2 个答案:

答案 0 :(得分:3)

第一项,对于“%s”格式,您需要将指针传递给缓冲区。您实际上是将指针传递给指向缓冲区的指针。放弃&amp ;.其次,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);

答案 1 :(得分:0)

更改为:

malloc(sizeof(char)*BUFFER)