2017-02-26 13 views
0

問題があります。ワイド文字列の幅を処理する関数を次に示します。私のプログラムは、BREAKPOINT 1の後に無限ループに入っています。私のループに何が問題なの?ループが初期化されない

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; 
} 

----- Ubuntuの端子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

関連する問題