In C, I want to check a given array of chars for an arbitrary letter, and change it according to what it is. For example, the characters “a” or “A” would be changed to “4”(the character representing 4). This is a coding excercise for me 🙂
The code is as follows:
#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;
}
This code never reaches the “SUCCESS” part. This says to me that either
(1) the value of changed is not pointing to the correct thing
(2) the pointer &a is incorrect
(3) I am completely wrong and it is something else
Any help would be appreciated.
Two things.
The following assigns the value
0x61or'a'to the character string.You probably rather meant to write
or
The next thing is with the following statement. Hereby you assign a pointer to an
intwith the memory address of achar. Which invokes undefined behavior as you are reading over the bounds of your valid memory in the next statement.Hereby you compare the first four bytes starting from both addresses. Both variables are only one byte wide.
If you only want to know whether there is an ‘a’ in some of your buffer, why don’t you just.