我用下面方法:
#include <iostream>
char *str = "com";
char *cnum = 0;
int i = 12;sprint(cnum, "%d", i);
strcpy(str, cnum);但不知道能不能得到“com12”数据。请问各位用什么方法?
#include <iostream>
char *str = "com";
char *cnum = 0;
int i = 12;sprint(cnum, "%d", i);
strcpy(str, cnum);但不知道能不能得到“com12”数据。请问各位用什么方法?
解决方案 »
- MFC从Edit控件输入一个一维数组,保存到s1,并且显示到静态文本IDC_ct上?
- 为什么 ListCtrl 删除掉HeaderCtrl后Item不能选中了
- VC2005调试问题
- shell开发一个文件的属性页面,可是没有XP的风格。
- int iCount=m_pRecordset->GetRecordCount();怎么返回的总是-1呢?请指教?
- 如何禁用串口和并口
- 英文版windows自带的输入法输入的汉字
- 关于断点的问题
- 如何在OCX中响应视图的ONDRAW函数??高手解决问题在加200分!
- 如何让CListCtrl在添加完n个Item后再刷新?
- 在哪个类中有DevMode结构的详细介绍,我找不到它了,帮个忙啊!!!!!!!
- 怎么得到一个dll中函数的调用格式?
char * str = "com"; //这样不行吧?
char cnum[11];
sprint(cnum, "%d", i);
strcpy(str, cnum);之所以定义11的空间,是由于int最长时10个字节,多一个为结束符
你的错误在于没有为cnum分配空间,然后向0处写值,那是不可访问的
即使那里成功了,strcpy(str, cnum);也可能出错,当cnum大于3个字符时(包结束符4个字节),就错了,因为str只有4个空间,你将覆盖后面的东东,后果不堪设想!
要用wsprintf,原因,我记不清楚了.你的用下面方法:
#include <iostream>
char *str = "com";
char *cnum = 0;
int i = 12;sprint(cnum, "%d", i);
strcpy(str, cnum);我的方法:
#include <iostream>
const char * cpchStr = "com";
char *pchBuf = NULL; //存储缓存.
char *pchNum = NULL; //请不要用0,不好.
int iNum = 12; //请不要使用i,i一般是用来做计数器的.int iCharTypeSize = sizeof(char); //获得char的长度.
int iIntTypeStrLen = 5 + 1; //请在系统初始化的时候,测试int类型的数值范围,
//来确定其转为字符串的长度.加一是为了存储'\0';//求取字符串长度,我忘记了.我就用lstrlen来代替吧.
//申请空间,呵呵,我喜欢用malloc,喜欢自己处理.呵呵.
int iBufLen = lstrlen(cpchStr) + iIntTypeStrLen + 1; //
if (iBufLen < 0)
{
//长度溢出进行处理.
return ERROR; //返回错误.错误号,自己编.
}
pchNum = (char *)malloc( iCharTypeSize * iIntTypeStrLen );
if (pchNum == NULL)
{
//空间申请失败,处理错误.
return ERROR;
}
//清理申请的空间.
memset( pchNum, 0, iIntTypeStrLen );char * pchBuf = (char *) malloc(iCharTypeSize * iBufLen);
if (pchBuf == NULL)
{
//申请空间失败.
free( pchNum ); //释放申请的空间pchNum
return ERROR;
}memset( pchBuf, 0, iBufLen ); //清理空间.
wsprintf( pchNum, "%d", iNum);
strcpy(pchBuf, pchNum);
如有不足的地方,请大虾们多多指教.我的信箱[email protected]
int iBufLen = lstrlen(cpchStr) + iIntTypeStrLen; //
我多用了一个字节,呵呵.