/* Write a function, char* strdup(const char*), that copies a C-style string into memory it
allocates on the free store. Do not use any standard library functions. Do not use subscripting;
use the dereference operator * instead. */
#include <iostream>
char* strdup(const char* s) {
int size{0};
for (;*s++; size++);
char* str_ptr = new char[size + 1];
char* str = {nullptr};
s -= size;
for (;*s++; *str_ptr++ = *s);
str_ptr -= size;
str = str_ptr;
delete[] str_ptr;
return str;
}
int main()
{
char* rdy = {strdup("HELLO")};
std::cout << rdy << std::endl;
}
LyogV3JpdGUgYSBmdW5jdGlvbiwgY2hhciogc3RyZHVwKGNvbnN0IGNoYXIqKSwgdGhhdCBjb3BpZXMgYSBDLXN0eWxlIHN0cmluZyBpbnRvIG1lbW9yeSBpdAphbGxvY2F0ZXMgb24gdGhlIGZyZWUgc3RvcmUuIERvIG5vdCB1c2UgYW55IHN0YW5kYXJkIGxpYnJhcnkgZnVuY3Rpb25zLiBEbyBub3QgdXNlIHN1YnNjcmlwdGluZzsKdXNlIHRoZSBkZXJlZmVyZW5jZSBvcGVyYXRvciAqIGluc3RlYWQuICovCgoKI2luY2x1ZGUgPGlvc3RyZWFtPgoKY2hhciogc3RyZHVwKGNvbnN0IGNoYXIqIHMpIHsKCiAgICBpbnQgc2l6ZXswfTsKICAgIGZvciAoOypzKys7IHNpemUrKyk7CiAgICBjaGFyKiBzdHJfcHRyID0gbmV3IGNoYXJbc2l6ZSArIDFdOwogICAgY2hhciogc3RyID0ge251bGxwdHJ9OwoKICAgIHMgLT0gc2l6ZTsKCiAgICBmb3IgKDsqcysrOyAqc3RyX3B0cisrID0gKnMpOwogICAgc3RyX3B0ciAtPSBzaXplOwoKICAgIHN0ciA9IHN0cl9wdHI7CiAgICBkZWxldGVbXSBzdHJfcHRyOwogICAgcmV0dXJuIHN0cjsKfQoKaW50IG1haW4oKQp7CiAgICBjaGFyKiByZHkgPSB7c3RyZHVwKCJIRUxMTyIpfTsKICAgIHN0ZDo6Y291dCA8PCByZHkgPDwgc3RkOjplbmRsOwp9