初学者深夜提问,多有打扰,跪求指点。error C2664

一个俄罗斯方块的小程序,报错部分代码如下:
//显示分数信息
char string[5];
wColors[0]=FOREGROUND_RED| FOREGROUND_GREEN|FOREGROUND_INTENSITY;
textout(handle,26+dx,5+dy,wColors,1,_itoa_s(score,string,10));
textout(handle,26+dx,9+dy,wColors,1,_itoa_s(level,string,10));

错误如下:
error C2664: “textout”: 不能将参数 6 从“errno_t”转换为“LPTSTR”
1> 从整型转换为指针类型要求 reinterpret_cast、C 样式转换或函数样式转换

这个程序在机房的vs2012运行正常,到笔记本上同样是vs2012,先是要求我把itoa改_成__itoa又改成_itoa_s,然后就一直报这个错误。

百度了一圈也不知道怎么回事,看到有类似的错误是因为字符集,我用的是多字符集啊。
作为初学者,学得相当不咋地,跪求指点。
第一次提问,如有不妥请见谅,拜谢。

4个回答

老的_itoa返回的是字符串,但是新的_itoa_s返回的是错误码,需要的字符串是在参数中返回的,因此你可以分为两句

textout(handle,26+dx,5+dy,wColors,1,_itoa_s(score,string,10));

改为

_itoa_s(score,string,10)
textout(handle,26+dx,5+dy,wColors,1,string);

另外,_itoa_s的第三个参数是缓冲大小。你的string明显只有5个字节,因此这里用10不是很合适。或者这里用5作为长度,或者定义的时候改为char string[10];

yichijingnian
yichijingnian 万分感谢,问题已经解决。
接近 5 年之前 回复
yichijingnian
yichijingnian 谢谢,等我下课回去改下试试。
接近 5 年之前 回复
yichijingnian
yichijingnian 学习了,谢谢。
接近 5 年之前 回复

先是要求我把itoa改_成__itoa又改成_itoa_sh: 这种要求一般是警告的,可以不理的。如果你的工程设置将警告当成错误,可能是会导致编译失败的。但这个设置是可以修改的!

一般不建议修改类似的警告,就算要修改,修改后首先要查一下修改前与修改后的函数的原型是否相同。如果不相同,则需要对应的修改代码,而不是简单的做函数替换。

yichijingnian
yichijingnian 回复91program: 3谢谢,我会好好研究下帮助的。
接近 5 年之前 回复
yichijingnian
yichijingnian 不修改函数之前,这个错误也是存在的。
接近 5 年之前 回复
91program
91program 学习 VS 一定要学会使用 VS 的帮助,它很强大的哦!
接近 5 年之前 回复

_itoa_s需要4个参数,你只给了3个

_itoa_s 函数原型如下:

errno_t _itoa_s(

int value,

char *buffer,

size_t sizeInCharacters, //存放结果的字符数组长度

int radix

);

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问