程序自动跳出问题 程序执行到memcpy(whdrPlay[bSwitchPlayBuffer].lpData,(char*)voiceData,BUFFERSIZEIN*2);就会自动跳出。请问会是什么问题呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 看一下whdrPlay[bSwitchPlayBuffer].lpData的长度与后面的BUFFERSIZEIN*2的长度是否一致,另外,初始化的内容(char*)voiceData也只能是单个字符的或是一个int(推荐)的整数,不能是一个以上的字符。 下面给出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; } 看一下whdrPlay[bSwitchPlayBuffer].lpData的长度与后面的BUFFERSIZEIN*2的长度是否一致,另外,初始化的内容(char*)voiceData也只能是单个字符的或是一个int(推荐)的整数,不能是一个以上的字符。--------------------------------------------------------------------Sorry,这条回复有误,没仔细看楼主的题目了,以为是memset了,惭愧! 这样吧: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);现在再试试吧。 应该不是大小问题吧。我在前面whdrplay[i].lpdata=new char buffersizein*2定义过了。 问题可能就在这里:申请的空间总是要比实际用的要大1,这多出来的一个字节是用来放字符终止符的, 最好用上面说的memset初始化一下。whdrplay[i].lpdata=new char buffersizein*2+1这样改改试试看。 哦,Sorry,刚才正确的写法应该是这样:whdrplay[i].lpdata=new char[buffersizein*2+1]; vc绘图 安装msdn出现问题 谁有Visual C++ 2005入门经典电子书? 请问一个VC连接ORCAL中出现的奇怪问题 【招聘】C++/VC兼职 VC怎么样实现ASCII和16进制的互相转换啊? 在线等...怎么CListCtrl::GetItemText没作用 急需帮助,谢谢各位!! 字体前面有“@”表示什么意思? 中国人自己的ACDSee -- ISee(完全开发代码GNU) 急:为什么使用CToolBarXP后无法向按钮添加文字标签了?? 请问 ,我该如何控制这个 COMBO BOX? 在线等。。。。
另外,初始化的内容(char*)voiceData也只能是单个字符的或是一个int(推荐)的整数,不能是一个以上的字符。
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;
}
另外,初始化的内容(char*)voiceData也只能是单个字符的或是一个int(推荐)的整数,不能是一个以上的字符。--------------------------------------------------------------------
Sorry,这条回复有误,没仔细看楼主的题目了,以为是memset了,惭愧!
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);
现在再试试吧。
whdrplay[i].lpdata=new char buffersizein*2
定义过了。
whdrplay[i].lpdata=new char buffersizein*2+1这样改改试试看。