当我将keys变量更改为> 256时,以下代码给我一个分段错误。问题似乎出在strcpy(str [i],keyname(i));上。声明。如果我将i换成300之类的值,我可以得到输出,但是如果我使用计数器,则会出现故障。

#include <curses.h>
#include <string.h>

int main(){

  initscr();
  noecho();
  nonl();
  keypad(stdscr, TRUE);
  int length = 300;
  int keys = 255;
  char buf[length];
  int i=0;
  char str[keys+1][length];

  strcpy(str[0], "keyname()\thas_key()\tinteger\n");

    for(i=1;i<keys;i++){

            strcpy(str[i], keyname(i));

            if(has_key(i))
              strcat(str[i], "\t\tTRUE");
            else
              strcat(str[i], "\t\tFALSE");

            sprintf(buf, "\t\t%i", i);
            strcat(str[i], buf);
            strcat(str[i], "\n");
    }
    endwin();
    echo();

    for(i=0;i<keys-1;i++){
            printf("%s", str[i]);
    }
    return 0;
}

最佳答案

如果该键没有名称,curses keyname函数将返回空指针。 (这会在您传递256等时发生)。

尝试从空指针中移出strcpy会导致分段错误。

要解决此问题,当keyname返回空指针时,您将需要采取其他措施,例如

char const *name = keyname(i);
if ( name )
    strcpy( str[i], name );
else
    strcpy( str[i], "unknown key" );

10-04 13:32