unsigned char *

guoxianyu521 2009-09-16 07:59:16
当我使用 strpy strcat 对 unsigned char *类型的数据进行处理时
会不会造成数据丢失或其他的后遗症?
...全文
150 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
guoxianyu521 2009-09-16
  • 打赏
  • 举报
回复
调试真郁闷!

发泄一些,不是针对大家!

都是些“傻逼”问题。参加软件设计大赛,马上就要交作品了!
44444444444444444444444444444444444444444444

郁闷!!!!!!!!!!!!!
guoxianyu521 2009-09-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wesleyluo 的回复:]
问下楼主用什么编译器啊?怎么调试不方便呢?
[/Quote]

vc++6.0 用char×存中文显示的是 乱码!
guoxianyu521 2009-09-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 ypyf3000 的回复:]
拜托,楼主你调用的那几个库函数参数类型都不对。该严肃的时候要严肃一点。
[/Quote]

你可以用 “强制类型转换”。
ketet 2009-09-16
  • 打赏
  • 举报
回复
拜托,楼主你调用的那几个库函数参数类型都不对。该严肃的时候要严肃一点。
wesleyluo 2009-09-16
  • 打赏
  • 举报
回复
问下楼主用什么编译器啊?怎么调试不方便呢?
brookmill 2009-09-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 guoxianyu521 的回复:]
我该如何避免这个问题?
将  unsigned char × 类型的数据都改成  char ×  合适么?
[/Quote]
问题的关键不在于类型,而是szKeyWords的格式。
假定汉字的编码里没有0(这个我不懂),而且你能保证10个汉字后面跟着一个0,那么这个strcat应该是可以的。
guoxianyu521 2009-09-16
  • 打赏
  • 举报
回复
我的程序要处理汉字! 用char×很不方便调试呀?
guoxianyu521 2009-09-16
  • 打赏
  • 举报
回复
我该如何避免这个问题?

将 unsigned char × 类型的数据都改成 char × 合适么?
guoxianyu521 2009-09-16
  • 打赏
  • 举报
回复
例如:



char szBaiduSearchingURL[2048] = "http://www.baidu.com/s?wd=" ;
strcat( szBaiduSearchingURL, (char *)tempCallBackPage.szKeyWords ) ;
//tempCallBackPage.szKeyWords是一个 unsigned char * 型数据。会存一个10个汉字左右


我今天调试时,发现:连接时只连接了szKeyWords后面两个汉字。但过一段时间后又正常了!???
brookmill 2009-09-16
  • 打赏
  • 举报
回复
如果你的unsigned char数据里保证没有0,又能保证用0来标志数据结束,那就没什么问题了
brookmill 2009-09-16
  • 打赏
  • 举报
回复
strcpy、strcat之类的函数是以'\0'来标志字符串结束的。
你的unsigned char数据里的0会造成后续的数据丢失
失落的凡凡 2009-09-16
  • 打赏
  • 举报
回复
只要不溢出,不会有问题的
guoxianyu521 2009-09-16
  • 打赏
  • 举报
回复
up!!!
guoxianyu521 2009-09-16
  • 打赏
  • 举报
回复


#include <iostream>
#include <string>
#include <assert.h>
using namespace std;

int * next( char * p )
{//生成next数组

int m = strlen(p) ;
assert( m > 0 ) ;
int * N = new int[m] ;
assert( N != 0 ) ;
N[0] = -1 ;
int i = 0 ;
int j = -1 ;
while( i < m )
{
while( j >= 0 && p[i] != p[j] )
{
j = N[j] ;
}
i++ ;
j++ ;
N[i] = j ;
if( p[i] == p[j] )
{
N[i]-- ;
}
}

return N ;
}

int KMP( char *orig , char *searchWord , int * n )
{//如果搜到返回在源串中的下标,否则返回-1
int i = 0 ;
int j = 0 ;
while( i < strlen(orig) )
{
while( orig[i] != searchWord[j] && j > 0 )
{
j = n[j] ;
}
if( searchWord[j] == orig[i] )
{
j++ ;
}
if( j == strlen(searchWord) )
{
delete []n ;
return i - j + 1 ;
}
i++ ;
}
delete []n ;

return -1 ;
}
int main()
{
char o[100];//源字符串
char s[100];//要搜索的字符
cin>>o;

cin>>s;

cout<<KMP(o, s, next(s))<<endl;

return 0;
}

// 此程序,为什么delete时,会弹出终止对话框???

guoxianyu521 2009-09-16
  • 打赏
  • 举报
回复
一个汉字的字节可能包含"\0"么????
ketet 2009-09-16
  • 打赏
  • 举报
回复
补充一下: 我主张的是,既然你选择了这几个库函数来操作字符串,那么参数就尽量要匹配;如果你为了特殊的目的而使用unsigned char*类型的实参,那么最好根据你自己的意思,重新定义这些函数或者利用其他的库函数来完成你需要的功能。
2009-09-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 brookmill 的回复:]
如果你的unsigned char数据里保证没有0,又能保证用0来标志数据结束,那就没什么问题了
[/Quote]
楼主不妨就按照这句话的标准检查一下,看看字符串里到底有没有 \0。
ketet 2009-09-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 guoxianyu521 的回复:]
引用 9 楼 ypyf3000 的回复:
拜托,楼主你调用的那几个库函数参数类型都不对。该严肃的时候要严肃一点。


你可以用 “强制类型转换”。
[/Quote]

这种强制类型转换说明了程序本身设计的有缺陷。这是完全可以避免的操作。

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧