当我将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" );