如何从char数组中提取字符

我试图从缓冲区中提取char数组,但在提取第一个char数组后停止工作。
char *msg = "1~Message~ILOVEYOUrn2~Message~Doyouloveme?rn3~Message~OfcourseIdo!Not!rn";
char tempbuffer[1024];
char *tbuf;

tbuf = &tempbuffer[0];

/* Start parsing */
while (*msg != '') {

    while(*msg != 'n') {

        while (*msg != 'r') {
            *tbuf = *msg;
            msg++;
            tbuf++;
        } /* closing 'r' */

        msg++;
        tbuf++;
    } /* closing 'n' */

    *tbuf = '';

    /* Printout buffer for debugging purposes */
    printf("x %sn", tempbuffer);

    /* Clear tempbuffer before starting to parse the buffer again */
    memset(tempbuffer, 0, sizeof((char) 1024));
} /* closing '' */

return 0;

}
printf显示1~Message~ILOVEYOU,它停止工作。 我期待以下输出
1~Message~ILOVEYOU
2~Message~Doyouloveme?
3~Message~OfcourseIdo!NOT!
有任何想法吗?     
已邀请:
在启动第二个和后续循环之前,需要重置tbuf以指回tempbuffer的开始。     
我能看到的一些问题: 1:
memset
的参数不正确。 更改
memset(tempbuffer, 0, sizeof((char) 1024));
memset(tempbuffer, 0, sizeof(tempbuffer));
实际上这里并没有真正需要
memset
。 2:遇到
n
时,不要递增指针
msg
。 加
msg++;
前/后
*tbuf = '';
3:在每次迭代开始时将
tbuf
重置为数组的开头 加
tbuf = &tempbuffer[0];
在第一个
while
循环内。 4:
*tbuf = '';
应为
*(tbuf-1) = '';
因为你已经增加了
tbuf
。 看得出来了     
使用调试器并逐步执行您的程序。或者用笔和纸手动完成。 当你遇到第一个' n'时会发生什么?之后会发生什么? 你被困在' n'上,因为在打印解析的消息后你永远不会移动读指针。     
* tbuf =' 0'应该是*(tbuf-1)因为你在一个不必要的simbol之后添加终止零。为什么你需要调用memset。您可以在缓冲区中写入旧数据。     
这是固定代码...... 问题: sizeof错了 你没有在' n'之后增加msg 你没有在每个' n'之后将tbuf设置回tempbuffer的开头 虽然它并不总是报告为错误,但您缺少一些包含文件,这可能会导致问题 #include< string.h> #include< stdio.h> char * msg =“1~消息~ILOVEYOU r n2~消息~Doyouloveme? r n3~消息〜OfcourseIdo!Not! r n”; char tempbuffer [1024]; char * tbuf =&tempbuffer [0]; int main(int argc,char * argv []) {     argc = argc;     argv [0] = argv [0];     / *开始解析* /     while(* msg!=' 0')     {         while(* msg!=' n')         {             while(* msg!=' r')             {                 * tbuf = * msg;                 MSG ++;                 TBUF ++;             }             MSG ++;             TBUF ++;         }         * tbuf =' 0';         / *打印输出缓冲区用于调试目的* /         printf(“x%s n”,tempbuffer);         / *在开始再次解析缓冲区之前清除tempbuffer * /         memset(tempbuffer,0,sizeof(tempbuffer));         tbuf =&tempbuffer [0];         MSG ++;     }     返回0; }     
我建议你看一下字符串函数strtok ..如果你想要一个简单的代码而不是提供的代码让我知道     

要回复问题请先登录注册