2013-06-05 38 views
0

我的C程序刚刚在打印到终端的“清零”字符串之后冻结。我无法找出原因...C程序在打印到屏幕后会冻结

  int formattedMsgLen = strlen(msg)+strlen(from)-strlen(MSG_PRFX_ALL) + 1; 
      printf("formattedMsgLen = %d\n",formattedMsgLen); 
      char * formattedMsg = (char*)malloc(formattedMsgLen) ; 
      if (NULL == formattedMsg) { 
       perror("malloc:"); 
       sem_post(&writeSem); 
       NAMES_MUTEX_UNLOCK; 
       exit(EXIT_FAILURE); 
      } 
      printf("cont. building msg\n"); 
      //memset(formattedMsg, 0, formattedMsgLen); 
      printf("zeroed\n"); 
      memcpy(formattedMsg, MSG_PRFX_ALL, strlen(MSG_PRFX_ALL)); 
      printf("msg to all: %s",formattedMsg); 

编辑:

#define MSG_PRFX_ALL ("All") 
+0

确定that' MSG_PREFIX_ALL'适合'formattedMsg'? – utdemir

+7

您可能需要在该printf之后换行,因为您的缓冲区可能不会冲洗。你确定它冻结了吗? – Hut8

+0

我确定它没有填充它,因为我确定MSG_PREFIX_ALL较小。他们应该是在相同的大小? – Bush

回答

1

在上一个printf语句中包含一个换行符。

printf("msg to all: %s\n",formattedMsg); 

这将清除缓冲区。

0

strlen(MSG_PRFX_ALL)=3memcpy抄袭只有3个字母不\0 添加的printf之前 formattedMsg[strlen(MSG_PRFX_ALL)]='\0'

0

尝试加入这一行在最后printf

fflush(stdout); 
0

更换

memcpy(formattedMsg, MSG_PRFX_ALL, strlen(MSG_PRFX_ALL)); 

strcpy(formattedMsg, MSG_PRFX_ALL);