C程序在打印到屏幕后冻结

时间:2013-06-05 21:23:25

标签: 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")

4 个答案:

答案 0 :(得分:1)

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

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

这将清除缓冲区。

答案 1 :(得分:0)

strlen(MSG_PRFX_ALL)=3memcpy仅复制了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);