Desminto essa necessidade. Copia apenas o ponteiro, ou seja, o endereço inicial da memória do array.
A única forma de pôr o compilador a copiar tudo na passagem de argumentos é usar estruturas. Ver demo abaixo.
A única forma de pôr o compilador a copiar tudo na passagem de argumentos é usar estruturas. Ver demo abaixo.
Código:
struct xpto {
char a[100];
};
void foo(struct xpto x)
{
printf("sizeof(x): %d\n", sizeof(x));
x.a[0] = '0';
}
void foo2(char b[100])
{
printf("sizeof(b): %d\n", sizeof(b));
b[0] = '0';
}
main()
{
struct xpto x;
char b[100];
char c = 'x';
x.a[0] = c; foo(x); printf("orig %c, new %c\n", c, x.a[0]);
b[0] = c; foo2(b); printf("orig %c, new %c\n", c, b[0]);
}