关于strcmp函数的问题

lk_517 2006-11-21 10:42:55
程序中有两个字符串,一个属于类数组变量:
class _FPGA
{
//......
char DataToFpga[DataToFpgaLength]; // 最终经过转换传给fpga的数据
//......
}

一个属于函数内部分配的内存空间:
void _FPGA::test( void )
{
//......
char *ReadFlag = new char[40000];
//......
ReadFlag = xxx.Readxxx();
if( !strcmp( ReadFlag,DataToFpga ) )
{
xxxxx;
}
}

现在函数的作用是首先让ReadFlag指向另一个函数的返回字符串,然后让其和DataToFpga比较,看是否相等,具体实现如上,可不管ReadFlag 获得的是什么样的返回值,strcmp都是返回,也就是相等,请问是为什么?
...全文
783 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lk_517 2006-11-24
  • 打赏
  • 举报
回复
楼上的朋友能否详细说明?

你的意思就是,只要返回的是unicode或者是其它双字节的ASCII码,不管另外一个比较数是什么都返回相等?
csmwidget 2006-11-24
  • 打赏
  • 举报
回复
你的字符串如果是unicode或者是其它双字节的ASCII码,并且是大端系统的话就一定返回相等
fflush 2006-11-22
  • 打赏
  • 举报
回复
strcmp 只做他自己该做的事情,也就是认为你给的参数是以'\0'结尾的字符串,然后比较他们是否相等。lz如果觉得结果不是你所期望的,可能是你什么地方没弄清楚,从你现在给的代码也看不出什么
lk_517 2006-11-22
  • 打赏
  • 举报
回复
sorry all,白天都有事做,所以一般只有这个时间段能上来

to wanfustudio:
char *ReadFlag = new char[40000];是之前用来干别的,这时候已经没有用了,也就没有释放,用来做这个事情了。理论上讲,ReadFlag = xxx.Readxxx();是赋值操作,与ReadFlag之前指向的地址无关,所以应该没有影响。
btw,four underpaints什么意思。

to A_snail:
单纯的这个实例应该是正常的,不可能怀疑strcmp的错误,呵呵,看来还是程序里面有漏洞。xxx.Readxxx();在实际程序中确实返回是char *

to:jixingzhong

Readxxx 中返回的不是 DataToFpga 数组中的内容,我进入调试看过的,也试过分别把两者的值cout出来,都不相等,但是跳到strcmp中比较的就是返回0

明天再研究一下代码,多谢各位,看还有没有深入意见
jixingzhong 2006-11-22
  • 打赏
  • 举报
回复
总是返回 0,
这个和你的数据内容有关系 ...

ReadFlag = xxx.Readxxx();
if( !strcmp( ReadFlag,DataToFpga ) )
DataToFpga 中的数据 和 Readxxx 返回的数据,
我估计楼主你 Readxxx 中返回的就是 DataToFpga 数组中的内容吧?
这样的话自然是永远相等的 ~~
凌殿Y_ST 2006-11-22
  • 打赏
  • 举报
回复
xxx.Readxxx();的返回值最好为指针型数据,在赋值时用(char*)进行强转,即ReadFlag = (char*)xxx.Readxxx();这样运行也能正常,不过似乎取得的值进行比较没多少意义!
凌殿Y_ST 2006-11-22
  • 打赏
  • 举报
回复
下面是实例化的代码,编译通过:
------------------------------------------------------------------
#include "stdio.h"
#include "stdlib.h"
#include "string.h"

#define DataToFpgaLength 10

class _FPGA
{
//......
char DataToFpga[DataToFpgaLength];
char* Readxxx();
// 这个Readxxx()函数,必需返回的是非void数据,否则下面的ReadFlag = Readxxx()无法赋值,若想与char[](char*)进行strcmp,最好是返回值同样为char*,至于下面分配空间没多少争议,这个小代码运行正常;

public:
void _FPGA::test( void );

//......
};

char* _FPGA::Readxxx()
{
char* tmp="abcde";
return tmp;
}

void _FPGA::test( void )
{

char *ReadFlag = new char[40000];
ReadFlag = Readxxx();
if( !strcmp( ReadFlag,DataToFpga ) )
printf("strcmp return 0!\n");
else
printf("strcmp don't return 0!\n");
}

int main()
{
_FPGA a;

a.test();
return 0;
}

------------------------------------------------------------
strcmp don't return 0!
Press any key to continue
飞哥 2006-11-22
  • 打赏
  • 举报
回复
这~~~~~~~~~

four underpaints~~~~~`

sigh....
飞哥 2006-11-22
  • 打赏
  • 举报
回复
char *ReadFlag = new char[40000];
这句就没用

直接 char *ReadFlag =xxx.Readxxx()
lk_517 2006-11-21
  • 打赏
  • 举报
回复
ReadFlag本来是另有它用,后来想试一下能不能在无用时直接用它接受返回值,因为照我的理解返回的是地址,最多就是ReadFlag指向另一块区域

但一试就发现strcmp不对,所以上来问一下大家,对字符串操作接触较少
xiao_potato 2006-11-21
  • 打赏
  • 举报
回复
不知道。但对
char *ReadFlag = new char[40000];
又让ReadFlag指向另一个函数的返回值表示疑问。

64,648

社区成员

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

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