How to concatenate two byte arrays in C?

17,013

There is no byte type in C. Unless it's some type definition, you could use unsigned char or some fixed type from <stdint.h> portably. Anyway, here is some solution:

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

int main(void) {
    unsigned char a[3+3] = {1, 2, 3}; // n+m
    unsigned char b[3]   = {4, 5, 6}; // m

    memcpy(a+3, b, 3); // a+n is destination, b is source and third argument is m

    for (int i = 0; i < 6; i++) {
        printf("%d\n", a[i]);
    }

    return 0;
}

Make sure that array a has room for at least n + m elements (here n = 3 and m = 3 as well) in order to avoid issues with array overflow (i.e. undefined behavior, that may crash yor program or even worse).

Share:
17,013

Related videos on Youtube

Ali Caglayan
Author by

Ali Caglayan

Interested in type theory, category theory and algebraic topology. Mixing these up is even more interesting.

Updated on August 13, 2022

Comments

  • Ali Caglayan
    Ali Caglayan over 1 year

    I am coding on the Arduino platform and I am trying to write something that will concatenate/append byte arrays in C.

    byte a[] = {a1, ..., an};
    byte b[] = {b1, ..., bm};
    
    byte c[] = a + b; // equivalent to {a1, ..., an, b1, ..., bm}
    

    What is the best way to get the above result?

    I tried searching online, however I have not had much luck. I saw another answer on SO highlighting the steps needed in order to do this however I could not follow them. They also say that there are libraries that deal with this kind of thing, however as I am on Arduino I am unsure whether or not these are totally available to me.

    I understand there needs to be some sort of memory manipulation in order for this to work however I am new to these kinds of low level manipulations so they do not make too much sense to me. I have experience in higher languages (C#, Java and some C++).


    I should also add: Can the same technique work for:

    byte a[] = {a1, ..., an};
    byte b[] = {b1, ..., bm};
    
    a = a + b
    
  • Iharob Al Asimi
    Iharob Al Asimi about 9 years
    No, no loops need to be involved.