> мне чтото эта строчка мозг взорвала:
> i = namsiz;
> sp = symbuf;
> while(i--)
> if ((*sp++ = *s++)=='\0') --s;
> я так понимаю что тут копируется строка а остальные байты забиваются нулями? Правильно понимаешь, только "нулями" - это не совсем точно. А вот коментарии "просто копирует" неправильные.
Цикл while выполняется namesiz раз (скорее всего namsiz это размер области на которую указывает symbuf).
sp принимает значения от symbuf до symbuf + namesiz * (размер *sp)
s принимает значения от своего начального до адреса первого '\0',
а потом каждый раз увеличивается на размер *s и тут же уменьшается,
потому как условие в if выполняется.
Ну, и чтоб не быть голословным:
#include <stdio.h>
void
print_array(unsigned int n, char *a)
{
unsigned int i = 0;
printf("%p:", a);
while(i < n) printf(" 0x%X", a[i++]);
printf("\n");
}
int
main()
{
int namsiz,
i;
char dst[] = {'A', 'A', 'A', 'A', 'A', 'A', '\0'},
src[] = {'B', 'B', 'B', '\0', 'B', 'B', 'B'};
char *symbuf = dst,
*sp,
*s = src;
namsiz = sizeof(dst);
i = namsiz;
sp = symbuf;
printf("dst: ");
print_array(namsiz, dst);
printf("src: ");
print_array(namsiz, src);
while(i--)
if ((*sp++ = *s++)=='\0') --s;
printf("dst: ");
print_array(namsiz, dst);
printf("src: ");
print_array(namsiz, src);
return 0;
}
P.S. Не нашел как форматировать код