C阵列比较
是用于比较数组(在c)中使用string.h>? 使用memcmp的方法 我想比较我的单元测试中的int和双打阵列 我不确定是否使用: double a[] = {1.0, 2.0, 3.0}; double b[] = {1.0, 2.0, 3.0}; size_t n = 3; if (! memcmp(a, b, n * sizeof(double))) /* arrays equal */ 或编写定制is_array_equal(a, b, n)类型函数? 解决方案 memcmp将进行精确比较,这对于浮子来说很少是一个好主意,并且不会遵循Nan!= Nan的规则.对于排序,这很好,但是出于其他目的,您可能需要进行近似比较,例如: bool dbl_array_eq(double const *x, double const *y, size_t n, double eps) { for (size_t i=0; i
0 2024-04-08
编程技术问答社区
memcmp,但需要与固定值的块进行比较
我需要将内存块与C中的固定值进行比较.我可以使用memcmp做到这一点吗?类似: memcmp(starter_address, fixed_value ,num_byte) 我需要fixed_value是固定值,而不是块的起始地址. 将固定值写入整个临时内存块不是一个选项,因为我的空间有限. 使用循环编写和检查存储器一个一个选项,因为它非常慢. 如果不可能,任何人都可以告诉我一个比memcmp快(或更快)的解决方案? 谢谢, 编辑:假设我有5GB的内存,可以保持0.我正在尝试确保它们全部0.检查块的第一个字节是否安全,然后执行此操作: memcmp(starter_address,starting_address + One_byte,fix_gb); ? 编辑:这就是为什么我需要使用MEMCMP而不是用户定义的循环: 此代码花了546个时钟滴答到运行: memset(0x80000000 , 0x1 , 0x1000000
2 2024-04-08
编程技术问答社区
memcmp返回值的大小是什么意思?
我碰巧遇到了一个令人难以置信的令人讨厌的错误:在我自己的PC上(Windows 7 x64,mingw)我的C程序将在比较数组成员时成功使用memcmp对数组进行分类. 我的功能使用的气泡排序算法,它的骨架看起来像这样: void array_sort(ArrayMap *array, char direction) { make sure direction is +1 or -1 only define some variables for(...) { for(...) { cmpres = memcmp(elm1, elm2, sizeOfElement); if (cmpres!=0&&cmpres!=direction) { SWAP here } } } 现在,在
0 2024-04-07
编程技术问答社区
memcmp链接器错误 Visual Studio 2015
我有一个Visual Studio 2012 C ++项目. 我最近卸载了它,并安装了Visual Studio 2015并升级了该项目. 当我构建项目时,获得错误,如下所示: 错误lnk2019未解决的外部符号_memcmp在函数中引用 此外,我没有在代码memcmp fucntion中使用任何地方. 我使用了链接器的详细函数,可以在输出文件中看到下文: 找到_memcmp myc ++ project.obj 中引用 libcpmtd.lib(xstrcoll.obj) 中引用 加载libvcruntimed.lib(__ memcmp_.obj) 这里两个问题 1.即使我没有在代码中使用memcmp,为什么我会遇到链接器错误? 2.为什么将memcmp加载为__memcmp_.obj 我在项目中也有以下设置: 1.c ++ - >代码生成 - >运行时库设置为/MTD 2.-linker->忽略所有默认库都设
16 2023-11-24
编程技术问答社区
在C++中对结构使用memset
我正在努力为我的工作修复较旧的代码.它目前用C ++编写.他们将静态分配转换为动态,但没有编辑memsets/memcmp/memcpy.这是我的第一个编程实习,非常裸露我的新闻问题. 以下代码在C中,但我想将其放在C ++中(我读到Malloc在C ++中不是很好的实践).我有两种情况:首先,我们创建了F.然后,您使用&f来填充零.第二个是指针 *pf.我不确定如何将PF设置为所有0,例如C ++中的上一个示例. 您可以只做pf = new foo而不是malloc,然后致电memset(pf, 0, sizeof(foo))? struct foo { ... } f; memset( &f, 0, sizeof(f) ); //or struct foo { ... } *pf; pf = (struct foo*) malloc( sizeof(*pf) ); memset( pf, 0, sizeof(*pf) ); 解决方案 是的,但是仅当Foo是
38 2023-02-27
编程技术问答社区
memcmp与多重相等比较
前提:考虑这样的类或struct T,对于两个对象a和b类型的T T > memcmp(&a, &b, sizeof(T)) == 0 产生与 相同的结果 a.member1 == b.member1 && a.member2 == b.member2 && ... (memberN是T的非静态成员变量). 问题:何时应使用memcmp与a和b进行比较,何时应使用链式==? 这是一个简单的示例: struct vector { int x, y; }; 对于vector ==过载vector,有两种可能性(如果保证给出相同的结果): bool operator==(vector lhs, vector rhs) { return lhs.x == rhs.x && lhs.y == rhs.y; } 或 bool operator==(vector lhs, vector rhs) { return memcmp(&lhs,
28 2023-02-25
编程技术问答社区
为什么一个位图的比较不等于它自己?
这在这里有些困惑.以下代码是少量测试应用程序的一部分,以验证代码更改未引入回归.为了使它快速使用memcmp哪个似乎是比较两个相等大小的图像的最快方法(毫无疑问) . 但是,我们有一些测试图像显示出一个令人惊讶的问题:memcmp在位图数据上告诉我们它们并不相等,但是,像素像素的比较根本没有发现任何差异.我的印象是,在Bitmap上使用LockBits时,您会得到图像的实际原始字节.对于24 bpp位图,很难想象像素相同,但基础像素 data 不是. 一些令人惊讶的事情: 差异是始终 单个字节,在一个图像中是00,另一个图像中的FF. 如果将PixelFormat更改为LockBits LockBits或Format32bppRgb或Format32bppArgb,则比较成功. 如果通过第一个LockBits返回的BitmapData将第4个参数返回到第二个论点,则比较成功. 如上所述,像素像素的比较也成功了. 我在这里有点困难,因为坦率地说,我无法想象为什
48 2023-02-11
编程技术问答社区
使用文件i/o来读取字节长度
我试图通过以下代码找到两个不同文件的字节长度,但是将字节长度称为1,这显然是错误的. 从长远来看,我正在尝试比较每个文件的内存位置并打印出您所看到的它们的不同位置.因此,我没有到任何地方,并且做了printf语句以查看问题可能在哪里.因此,看起来我的长度似乎没有正确计算. 旁注可能会帮助我的问题 - 我为memcmp找到了这一点,但这是否意味着我不能使用!=?: 如果返回值,如果 如果返回值(如果> 0),则表明str2小于str1 如果返回值如果= 0,则表明str1等于str2 帮助! void compare_two_binary_files(int f1, int f2) { ssize_t byte_read_f1, byte_read_f2, length, numRead, bob, length2; char buf1[BUF_SIZE], buf2[BUF_SIZE], a[100], b[100]
38 2022-09-22
编程技术问答社区
当两者的结果相同时,我应该使用memcmp还是链式相等|来操作?
前提条件:考虑这样一个类或结构 T,它对于 a 和 b 类型的两个对象 T memcmp(&a, &b, sizeof(T)) == 0 产生与 相同的结果 a.member1 == b.member1 && a.member2 == b.member2 && ... (memberN是T的非静态成员变量). 问题:什么时候应该使用memcmp来比较a和b是否相等,什么时候应该使用链式==? 这是一个简单的例子: struct vector { int x, y; }; 为 vector 重载操作符 ==,有两种可能性(如果它们保证给出相同的结果): bool operator==(vector lhs, vector rhs) { return lhs.x == rhs.x && lhs.y == rhs.y; } 或 bool operator==(vector lhs, vector rhs) { return memcmp(&lhs
182 2022-07-19
编程技术问答社区
如何在C语言中用strchr获取子串?
我正在尝试获取字符串的一部分. 我有以下代码: #include #include #include char mystring[]="The quick brown fox jumps over the lazy dog"; char word1[]="The"; char * posb,pose; char * word2; int b,e,n; n=memcmp(mystring, word1, sizeof(word1)-1); if (n==0) printf("the first word is found!\n"); posb=strchr(mystring,' '); // posb will be a pointer to the first character b=posb-mystring+1; printf("posb -> %d\n",posb); printf("b -> %d\n",
296 2022-07-19
编程技术问答社区
在memcmp中出现意外的分离故障
以下简单的程序段错误适合我: #include int main() { void* voidp = NULL; char zeroes[sizeof(void*)]; memset(zeroes, 0, sizeof(void*)); int res = memcmp(&voidp, zeroes, sizeof(void*)); return 0; } 调试器显示段错误在 memcmp 中. 我的机器运行的是 64 位 Ubuntu 8.04,gcc 版本是 4.2.4. 它在我尝试过的其他机器(32 位或 64 位)上运行良好. 关于发生了什么的任何想法? 更新:这是汇编代码: .file "failed.c" .text .globl main .type main, @function main: .LFB2: pushq %rbp .LCF
4312 2022-07-19
编程技术问答社区
如何对byte[]的两个部分调用memcmp()(带偏移)?
我想有效地比较byte[]的部分 - 所以应该使用memcmp(). 我知道我可以使用pinvoke来调用memcmp() - 比较两个字节数组.NET 但是,我想比较byte[]的部分 - 使用偏移量,并且由于它使用指针,因此没有偏移量而没有memcmp(). int CompareBuffers(byte[] buffer1, int offset1, byte[] buffer2, int offset2, int count) { // Somehow call memcmp(&buffer1+offset1, &buffer2+offset2, count) } 我应该使用c ++/cli来做吗? 我应该用intptr使用pinvoke吗?怎么样? 谢谢. 解决方案 c ++/cli肯定是最干净的,但如果您尚未使用它,这几乎没有证明为项目添加C ++/CLI. 如何 marshal.unsafeaddrofpinnedarra
266 2022-07-19
编程技术问答社区
当两者的结果相同时,我应该使用memcmp还是链式相等|来操作?
前提条件:考虑这样的类或结构 T ,对于两个对象 a 和 b 类型 T memcmp(& a,& b,sizeof(T))== 0 产生与相同的结果。 a.member1 == b.member1&& a.member2 == bmember2&&& ... ( memberN T 的静态成员变量。 问题:何时应该 memcmp 用于比较 a 和 b 使用 == ? 示例: struct vector { int x,y; }; 要重载运算符 == c $ c> vector ,有两种可能性(如果它们保证给出相同的结果): bool operator ==(vector lhs,vector rhs) {return lhs.x == rhs.x&& lhs.y == rhs.y; } 或 bool operator ==
194 2022-07-17
编程技术问答社区