2013-10-26 3 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 = malloc에 ​​있어야한다 그래서 (를 sizeof (숯불 문자열에 대한 포인터로하는 info.tab 의미 생각 : 여기

내 코드 왜 해달라고 얻을 char) * 10);

귀하의 버전은 10자를 보유하는 데 필요한 메모리를 더 할당하지만 작동하지 않아야합니다.

또한 change_dir()은이 배열에 인덱스를 할당 된 메모리 (예 : 인덱스 -1) 외부에 있도록 설정할 수 있으며 이로 인해 무시 무시한 결과가 발생할 수 있습니다.