gpt4 book ai didi

c - 带有数组数组的 memcmp

转载 作者:太空宇宙 更新时间:2023-11-04 06:37:58 25 4
gpt4 key购买 nike

在 C 中,我想检查给定的字符数组中的任意字母,并根据它的内容进行更改。例如,字符“a”或“A”将更改为“4”(表示 4 的字符)。这是我的编码练习:)

代码如下:

#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <zlib.h>

#define NUM_BUFFERS 8
#define BUFFER_LENGTH 1024

char buffArrays[NUM_BUFFERS][BUFFER_LENGTH];

int main(int argc, const char* arg[v])
{
const char a[] = "a";

gzFile file;
file = gzopen("a.txt", "rb"); //contains 8 lines of 1024 'a's
int counter = 0;
while(counter < NUM_BUFFERS)
{
gzread(file, buffArrays[counter], BUFFER_LENGTH - 1);
counter++;
}
counter = 0;
while(counter < NUM_BUFFERS)
{
int i = 0;
for( i; i < BUFFER_LENGTH; i++ )
{
int *changed = &buffArrays[counter][i];
if( memcmp(&a, changed, 1) == 0 )
printf("SUCCESS\n");
}
counter++;
}
gzclose(file);
return 0;
}

此代码永远不会到达“SUCCESS”部分。这对我说,要么

(1) changed 的​​值没有指向正确的东西(2) &a指针不正确(3) 我完全错了,是另外一回事

如有任何帮助,我们将不胜感激。

最佳答案

两件事。

以下将值0x61'a' 分配给字符串。

const char a[] = 'a';

你可能更想写

const char a = 'a'; /* assign a character to a character */

const char a[] = "a"; /* assign a string to a string */

接下来是下面的语句。在此,您分配一个指向 int 的指针,其内存地址为 char。当您在下一条语句中读取有效内存的边界时,它会调用未定义的行为。

int *changed = &bufferArrays[counter][i]; 

在此比较从两个地址开始的前四个字节。两个变量都只有一个字节宽。

if( memcmp(&a, changed, 4) == 0 )

如果您只想知道您的某些缓冲区中是否有“a”,为什么不直接呢。

int i, j;
for (i = 0; i < NUM_BUFFERS; i++)
for (j = 0; j < BUFFER_LENGTH; j++)
if (bufferArrays[i][j] == 'a') printf("got it!\n");

关于c - 带有数组数组的 memcmp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12489693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com