0

我的 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

4 回答 4

1

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

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

这将清除缓冲区。

于 2013-06-06T02:37:58.443 回答
0

strlen(MSG_PRFX_ALL)=3并且memcpy只复制了 3 个字母而不\0 在 printf 之前添加 formattedMsg[strlen(MSG_PRFX_ALL)]='\0'

于 2013-06-05T21:47:11.087 回答
0

尝试在最后一行之后添加这一行printf

fflush(stdout);
于 2013-06-05T21:47:44.783 回答
0

代替

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

strcpy(formattedMsg, MSG_PRFX_ALL);
于 2013-06-06T04:02:44.213 回答