程序执行到memcpy(whdrPlay[bSwitchPlayBuffer].lpData,(char*)voiceData,BUFFERSIZEIN*2);
就会自动跳出。请问会是什么问题呢?

解决方案 »

  1.   

    看一下whdrPlay[bSwitchPlayBuffer].lpData的长度与后面的BUFFERSIZEIN*2的长度是否一致,
    另外,初始化的内容(char*)voiceData也只能是单个字符的或是一个int(推荐)的整数,不能是一个以上的字符。
      

  2.   

    下面给出memcpy函数的用法供你参考一下:
    memcpy 
      
       原型:extern void *memcpy(void *dest, void *src, unsigned int count);  用法:#include <string.h>
      
      功能:由src所指内存区域复制count个字节到dest所指内存区域。
      
      说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。
      
      举例:      // memcpy.c
          
          #include <syslib.h>
          #include <string.h>      main()
          {
            char *s="Golden Global View";
            char d[20];
            
            clrscr();
            
            memcpy(d,s,strlen(s));
            d[strlen(s)]=0;
            printf("%s",d);        getchar();
            return 0;
          }
      

  3.   

    看一下whdrPlay[bSwitchPlayBuffer].lpData的长度与后面的BUFFERSIZEIN*2的长度是否一致,
    另外,初始化的内容(char*)voiceData也只能是单个字符的或是一个int(推荐)的整数,不能是一个以上的字符。--------------------------------------------------------------------
    Sorry,这条回复有误,没仔细看楼主的题目了,以为是memset了,惭愧!
      

  4.   

    这样吧:
    1 先用下面的代码初始化一下whdrPlay[bSwitchPlayBuffer].lpData中内容;
    memset(whdrPlay[bSwitchPlayBuffer].lpData,0,sizeof(whdrPlay[bSwitchPlayBuffer].lpData));
    2 先确保sizeof(whdrPlay[bSwitchPlayBuffer].lpData)返回的值大于BUFFERSIZEIN*2的值,再用:
    memcpy(whdrPlay[bSwitchPlayBuffer].lpData,(char*)voiceData,BUFFERSIZEIN*2);
    3 如果是想把字符串voiceData中的内容全部复制到whdrPlay[bSwitchPlayBuffer].lpData中的话,建议改成如下代码:
    memcpy(whdrPlay[bSwitchPlayBuffer].lpData,(char*)voiceData,strlen((char*)voiceData);
    现在再试试吧。
      

  5.   

    应该不是大小问题吧。我在前面
    whdrplay[i].lpdata=new char buffersizein*2
    定义过了。
      

  6.   

    问题可能就在这里:申请的空间总是要比实际用的要大1,这多出来的一个字节是用来放字符终止符的, 最好用上面说的memset初始化一下。
    whdrplay[i].lpdata=new char buffersizein*2+1这样改改试试看。
      

  7.   

    哦,Sorry,刚才正确的写法应该是这样:whdrplay[i].lpdata=new char[buffersizein*2+1];