Я использую *ptr
, чтобы перебрать массив символов от конца к началу (один байт за раз) и установить некоторые значения в пути. Когда указатель указывает на первый адрес, алгоритм должен остановиться.
char *buf = (char*)malloc(sizeof(char) * 3 + 1);
char *ptr = &buf[sizeof buf - 1]; // *ptr point to the last address
*ptr = '\0';
do {
if(alfa) {
*(--ptr) = "teststring"[alfa]; // *ptr decreases value by one
alfa -= i;
} else { *(--ptr) = 'N'; }
} while(*ptr != &buf[0]); // should check if *ptr is now pointing to the start of buf. If that's the case, stop.
Но, после того, как проверил, что адреса равны, он дает мне:
** stack smashing detected **: <unknown> terminated
Aborted (core dumped)
Другая (и, может быть, соответствующая) вещь: malloc должен выделять 4 байта из памяти, но когда я проверяю sizeof(buf)
, он имеет 8 байтов (?).
Примечание: вывод sizeof(char) * 3 + 1
действительно равен 4. Но это не то же самое, что sizeof(buf)
.