2017-02-26 81 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终端输出-----

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

回答