请大家帮我看一看这一小段程序错在什么地方!

mingpingzhang 2004-12-23 05:37:11
#include "stdafx.h"

int main()
{

TCHAR ch;
LPTSTR A="a";
LPTSTR B="B";
LPTSTR C=lstrcat(A,B);
std::cout<<C<<std::endl;
std::cin>>ch;


//std::cout<<GetDriveType("F:");

return 0;
}



刚学VC,却连一个字符串连接操作都搞不定,直让人伤心,灰心。
...全文
74 点赞 收藏 10
写回复
10 条回复
somedummy 2004年12月25日
直接写std::string mystr=SourceStr;
这样的话会调用std::string::string(const char*),这样的话就可以通过C风格的字符串构造一个std::string对象了
回复 点赞
mingpingzhang 2004年12月25日
如果我使用std::string,请问如何将WIN32 API返回的LPSTR或LPTSTR转为std::string.
回复 点赞
somedummy 2004年12月24日
调用strcpy应该是这样的
strcpy(A,"Hello");
你不应该改变A的值,只要你一改变就有可能出错。
回复 点赞
somedummy 2004年12月24日
你还是搞错了,A="Hello"已经把A置为一个const char的指针了,你应该使用strcpy来向A里面写入字符串"Hello"

要不然你就要使用std::string,这个是C++里面标准的字符串(char*一族是C风格字符串的代表类型)。

不过对于std::string,原来的C风格的字符串函数就基本上都不能用了,不过可以使用C++标准库里面对string定义的一些重载的operator
回复 点赞
mingpingzhang 2004年12月23日
谢谢某人马甲
但是,设A,B两个都是较长的字符串,又该怎么进行
比如说:
#include <windows.h>
#include <iostream>
#include <tchar.h>

int main()
{

TCHAR ch;
LPTSTR A=new TCHAR[100];
A="Hello";
A[5]='\0';
LPTSTR B="B";
LPTSTR C=lstrcat(A,B);
std::cout<<C<<std::endl;
std::cin>>ch;


return 0;
}
依然出错,提示如下:
xxx.exe 中的 0x004323a1 处未处理的异常:0xC0000005: 写入位置 0x0048f0c1 时发生访问冲突 。

C语言的字符处理不会都这么麻烦吧?
回复 点赞
somedummy 2004年12月23日
是lstrcat的问题

strcat这一组函数(包括strcat、wcscat、lstrcat)需要用户来分配空间保证连接字符串可以进行的
你需要这样LPTSTR A=new TCHAR[100];
A[0]='A';A[1]='\0';
然后strcat就可以了
回复 点赞
proinfor 2004年12月23日
有#include"iostream.h"
回复 点赞
mingpingzhang 2004年12月23日
#include <windows.h>
#include <iostream>
#include <tchar.h>

int main()
{

TCHAR ch;
LPTSTR A="a";
LPTSTR B="B";
LPTSTR C=lstrcat(A,B);
std::cout<<C<<std::endl;
std::cin>>ch;


//std::cout<<GetDriveType("F:");

return 0;
}

还是出错,提示如下:

xxx.exe 中的 0x004656b0 处未处理的异常:0xC0000005: 读取位置 0x00000000 时发生访问冲突 。
回复 点赞
somedummy 2004年12月23日
TCHAR用来实现Unicode和ANSI字符转换的时候需要加入TChar.h才行
回复 点赞
somedummy 2004年12月23日
你只包含了stdafx.h,这个是给MFC应用程序用的,找到到LPTSTR这样的类型,TCHAR需要包含专用的头文件才行
回复 点赞
发动态
发帖子
VC.NET
创建于2007-09-28

7260

社区成员

2.7w+

社区内容

.NET技术 VC.NET
社区公告
暂无公告