2017-02-26 10 views
0

문제가 있습니다. 다음은 와이드 문자열의 너비를 처리하는 함수입니다. 내 프로그램이 BREAKPOINT 1 뒤에 무한 루프를 입력하고 있습니다. 내 루프에 무슨 문제가 있습니까?While 루프가 초기화되지 않습니다.

static void ft_wstr_width(void) 
{ 
    wchar_t *temp; 
    size_t delta; 
    size_t len; 
    size_t i; 
    wint_t wc; 

    len = ft_wstrlen(g_ws); 
    delta = (size_t)g_fmt.width - ft_wstrsize(g_ws); 
    printf("(%d %zd)\n", g_fmt.width, ft_wstrsize(g_ws)); 
    temp = (wchar_t *)malloc(sizeof(wchar_t) * (len + delta + 1)); 
    temp[len + delta] = L'\0'; 
    if (g_fmt.flags[0]) 
    { 
     wc = (QWSZ ? L'0' : L' '); 
     i = 0; 
     while (i < delta); 
     { 
      temp[i] = wc; 
      ++i; 
     } 
     ft_wcopy(temp, g_ws, delta, len); 
    } 
    else 
    { 
     printf("[bp0]"); getchar(); // BREAKPOINT 0 
     ft_wcopy(temp, g_ws, 0, len); 
     i = len; 
     printf("[bp1]"); getchar(); // BREAKPOINT 1 
     while (i < len + delta); 
     { 
      printf("[bp2]"); getchar(); // BREAKPOINT 2 
      temp[i] = L' '; 
      ++i; 
     } 
    } 
    printf("[bp3]"); getchar(); // BREAKPOINT 3 
    free(g_ws); 
    g_ws = temp; 
} 

----- 우분투 단말 OUTPUT -----

stanislav:gh_ft_printf >>: ./a.out           
(15 3) 
[bp0] 
[bp1]   No reaction here (program keeps running) and 
^C <---- I have to kill the process with Ctrl+C 
+3

디버거는 세미콜론이 추가되어'while (i

+0

@Raymond - 디버거를 사용하고있는 것 같습니다. 디버거에서 본 결과를 해석하는 방법을 몰랐습니다. – jww

답변

1

동안 (I < LEN + 델타) ;

세미콜론.

+0

아 .... 오른쪽) 감사합니다! – Stanislav