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

码:

#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输入时会崩溃

最佳答案

第一项,对于“%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);

关于c - 打印指针信息时出现段错误(核心已转储),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28466505/

10-12 16:13