2013-10-26 112 views
0

我正在做一些更大的程序的測試,這裏即時試圖移動一個空格內充滿'*'的字符數組,它工作正常,但發送了許多鍵後,左右鍵值的變化,我不知道爲什麼閱讀輸入鍵盤

這裏是我的代碼:

include <curses.h> 
//#include <term.h>                        
#include <termios.h> 
#include <stdlib.h> 
#include "includes/my_list.h" 

void     init_term() 
{ 
    struct termios  term; 

    if (tcgetattr(0, &term) != 0) 
    { 
     printf("Fail to get input termios\n"); 
     //  return(0);                       
    } 
    term.c_lflag &= ~(ICANON | ECHO); 
    term.c_cc[VMIN] = 1; 
    term.c_cc[VTIME] = 0; 
    if (tcsetattr(0, TCSANOW, &term) != 0) 
    { 
     printf("Fail to set input termios\n"); 
     //  return(0);                       
    } 
} 

t_info   change_dir(t_info info, int flag) 
{ 
    if(flag == 0) 
    info.pos++; 
    else if (flag == 1) 
    info.pos--; 
    info.tab[info.pos] = ' '; 
    return(info); 
} 

int    main() 
{ 
    int   c; 
    int   i; int   pos; 
    t_info  info; 

    // tgetent(NULL, "xterm");                      
    info.tab = malloc(sizeof(*info.tab) * 10); 
    i = 0; 
    info.pos = 0; 
    init_term(); 
    while (read(0, &c, sizeof(int)) != 0) 
    { 
     printf("c = %d\n", c); 
     //  sleep(1);                       
     while(i < 9) 
     { 
      info.tab[i] = '*'; 
      i++; 
     } 
     i = 0; 
     if(c == 4479771) 
     { 
      printf("left ok1\n"); 
      info = change_dir(info, 1); 
     } 
     else if (c == 4414235) 
     info = change_dir(info, 0); 
     printf("%s\n", info.tab); 
    } 
} 

回答

0

我想你的意思info.tab要成爲一個指向一個字符的字符串,所以你應該有
info.tab =的malloc(的sizeof( char)* 10);

你的版本將分配更多的內存來保存10個字符,但不應該阻止它的工作。

此外,change_dir()可能會將此數組中的索引設置爲分配給它的內存之外(例如索引爲-1),這可能會產生可怕的後果。