error C2664: “int CWnd::GetWindowTextW(LPTSTR,int) const”: 不能将参数 1 从“char [10]”转换为“LP

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了error C2664: “int CWnd::GetWindowTextW(LPTSTR,int) const”: 不能将参数 1 从“char [10]”转换为“LP相关的知识,希望对你有一定的参考价值。

int num1,num2,num3;
char ch1[10],ch2[10],ch3[10];
GetDlgItem(IDC_EDIT1)->GetWindowText(ch1,10);
GetDlgItem(IDC_EDIT1)->GetWindowText(ch2,10);
num1=atoi(ch1);
num2=atoi(ch2);
num3=num1+num2;
itoa(num3,ch3,10);
GetDlgItem(IDC_EDIT3)->SetWindowText(ch3);

孙老师的源码在vs2008里提示这个错误,怎么回事呢?请高手解惑
非常感谢,另外请问GetWindowTextW是不是unicode下用的呢?

右击当前项目,选择属性,在项目默认值下面的“字符集”选项改为“使用多字节字符集”就可以了。这是多种编程语言标准不统一造成的。 参考技术A

这个问题是由于编码方式不同造成的,

一种方法是更改项目属性,选择多字节编码;

另一种方法就是改变关键字,不同编码对应不同关键字。此处可以选择_UNICODE编码,

即用 wchar_t 关键字。其他因编码方式造成问题的可以在MSDN中搜索(Data Type Mappings)

c语言编程runtime error怎么解决

#define M 4
#include"stdio.h"
int fun(int a[][M])

int i,j,max;
max=a[0][0];
for(i=0;i<=2;i++)
for(j=1;j<=M;j++)
if(a[i][j]>max)
max=a[i][j];

return max;


void main()

int arr[2][M]=5,8,3,45,76,-4,12,2;
printf("\nThe value of function is:%lf\n",fun(arr));
这有什么问题啊,请大虾指教~~~好的话可以追加到50分

修正两个错误即可:

1、fun函数里面两个for循环控制变量有问题,应改为下面这种形式:

for(i=0;i<2;i++)

for(j=0;j<M;j++)

if(a[i][j]>max)

max=a[i][j];

2、输出的时候也有问题,fun函数返回值是int,所以应该是:

printf("\\nThe value of function is:%d\\n",fun(arr));

扩展资料:

Runtime Error错误解析

1、buffer overflow

缓冲区溢出,缓冲区溢出一般就是你的程序中数组开小了,产生了越界访问,比如:定义int a[100]

此时你引用了a[1000]就很可能出现运行时错误。“缓冲区”一般指的就是程序中定义的一个数组,这片连续的内存空间用以存放一些要处理的数据。

值得一提的是缓冲区溢出漏洞就连成熟的程序员都有可能不小心忽视它导致巨大的损失,所以现在写代码一定要养成深思熟虑,考虑好每一个值的范围,以防越界。之所以存在缓冲区溢出漏洞,一个主要的原因是C语言并不对数组下标进行界限检查。

2、stack overflow栈溢出

栈这个东西在操作系统中通常用来维护一个函数的调用,C语言中在调用函数的时候会依懒一个“栈”这种数据结构的性质的内存。

参考技术A runtime error(运行时错误)就是程序运行到一半,程序就崩溃了。
根据经验,大多数情况是因为程序员对内存的理解不透彻导致错误应用引起的,简单的说几个常见的:
①除以零的情况,比如1/0此类的。
②数组越界:int a[3]; 但程序中的要求却至少是一个为100的数组。
③指针越界:int * p; p=(int *)malloc(5 * sizeof(int)); *(p+1000000)=10;
④使用已经释放的空间:int * p; p=(int *)malloc(5 * sizeof(int));free(p); *p=10;
⑤数组开得太大,超出了栈的范围,造成栈溢出:int a[100000000];Runtime error。
参考技术B

1、在Windows10桌面,右键点击左下角的开始按钮,在弹出的菜单中选择“运行”菜单项。

2、这时会打开Windows10的运行窗口,在窗口中输入命令regedit,然后点击确定按钮。

3、打开Windows10的注册表编辑器窗口,点击窗口中的“编辑”菜单。

4、接下来在弹出的菜单中点击“查找”菜单项。

5、在打开的查找窗口中,我们点击“查找目标”后面的文本框,输入命令runtime,然后选择下面的“全字匹配”前的复选框,接着点击“查找下一个”按钮。

6、一会就会在注册表中找到Runtime注册表键值。

参考技术C LZ你有两个地方有问题:
(1)fun函数里面两个for循环控制变量有问题,应改为下面这种形式:
for(i=0;i<2;i++)
for(j=0;j<M;j++)

if(a[i][j]>max)
max=a[i][j];

(2)输出的时候也有问题,fun函数返回值是int,所以应该是:
printf("\nThe value of function is:%d\n",fun(arr));本回答被提问者采纳
参考技术D 你这是数组越界了。。
你声明a[2]的话,只能取a[0],a[1],数组是把0做为开始的。
for(i=0;i<=2;i++)
for(j=1;j<=M;j++)
if(a[i][j]>max)
max=a[i][j];

这里都多取了。。。声明a[4]最多只到取到a[3]。追问

for(i=0;i<2;i++)
for(j=1;j<M;j++)
改成这样的话,还是不行啊~

以上是关于error C2664: “int CWnd::GetWindowTextW(LPTSTR,int) const”: 不能将参数 1 从“char [10]”转换为“LP的主要内容,如果未能解决你的问题,请参考以下文章

求助:error C2664: “CreateWindowExW”: 不能将参数 3 从“const char [8]”转换为“LPCWSTR”

error C2664: “StrCmpW”: 不能将参数 2 从“const char [12]”转换为“PCWSTR”

VS2012 error C2664: “std::make_pair”:无法将左值绑定到右值引用

error C2664: “int CWnd::MessageBoxW(LPCTSTR,LPCTSTR,UINT)”: 无法将参数 1 从“const char [9]”转换为“LPCTSTR”

解决error C2664: no instance of constructor "CFileDialog::CFileDialog" matches the list

解决error C2664: no instance of constructor "CFileDialog::CFileDialog" matches the list