2013-05-19 50 views
3

我在C中写了一个小函数,它接收一个char *,并通过“慢动作”打印它,这意味着每个字符在一段时间之后,从而使它看起来像打字动画。在C函数中错误打印

我的代码是:

void funnyprint(char* string) 
{ 
    int i=0; 
    int len=strlen(string); 
    if(len==0) 
    return; 
    int k=0; 
    char temp[1]; 
    temp[0]=string[k]; 
    for(i=0; i<7142800*len; i++) 
    { 
    fflush(stdout); 
    if((i!=0) && (i%7142800==0)) 
    { 
     printf(temp); 
     k++; 
     if(k<len) 
      temp[0]=string[k]; 
    } 
    } 
} 

现在的问题是它没有打印字符串,并给出了部分我的char *以及部分在胡言乱语来代替。

我想通了,这个问题是与记忆,所以我试图复制“串”到一个新的char *,所谓“新”。 我得到的代码:

void funnyprint(char* string) 
{ 
    int i=0; 
    int len=strlen(string); 
    if(len==0) 
    return; 
    int k=0; 
    char temp[1]; 
    char * new=malloc(len*sizeof(char)); 
    strncpy(new,string,len); 
    temp[0]=new[k]; 
    for(i=0; i<7142800*len; i++) 
    { 
    fflush(stdout); 
    if((i!=0) && (i%7142800==0)) 
    { 
     printf(temp); 
     k++; 
     if(k<len) 
      temp[0]=new[k]; 
    } 
    } 
} 

然而,结果并没有改变。我觉得我在这里错过了一个小问题,如果有人能够启发我,我会很高兴。

谢谢!

回答

2
printf(temp); 

你的临时数组不是空终止的,因此怪异的(又名未定义)行为。我没有看到这里需要char数组。它应该是一个字符。

char temp = string[k]; 

再后来

printf("%c", temp); 
+2

双向工作,谢谢! – TheEmeritus

+3

'putchar(temp)'怎么样? – johnchen902

1

我会继续整数眼睛为好,如果i是签订了32位INT你要经过约300个字符溢出它。作为计数器的无符号(32位)int会将其推回到600,但我建议使用sleep(),nanosleep()或类似函数,具体取决于您所在的平台/操作系统。

+2

谢谢,我会牢记这一点! – TheEmeritus