我的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 :(得分:1)
在上一个printf语句中包含换行符。
printf("msg to all: %s\n",formattedMsg);
这将清除缓冲区。
答案 1 :(得分:0)
strlen(MSG_PRFX_ALL)=3
和memcpy
仅复制了3封不带\0
的字母
在printf之前添加
formattedMsg[strlen(MSG_PRFX_ALL)]='\0'
答案 2 :(得分:0)
尝试在最后printf
之后添加此行:
fflush(stdout);
答案 3 :(得分:0)
替换
memcpy(formattedMsg, MSG_PRFX_ALL, strlen(MSG_PRFX_ALL));
与
strcpy(formattedMsg, MSG_PRFX_ALL);