#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cassert>
using namespace std;
typedef unsigned size_t;
char* read_all_text(const char* _unused, size_t* len ) {
const char* buf = "The quick brown fox jumps\nover\n\nthe lazy dog.";
size_t L = strlen(buf);
char* p = new char[L+1];
strcpy(p,buf);
p[L] = 0;
*len = L;
return p;
}
int main() {
const char* path = nullptr;
// read
size_t len = 0;
char* str = read_all_text(path,&len);
const char* end = str + len;
// count and allocate
size_t line_ct = count((const char*)str,end,'\n') + 1;
size_t ldx = 0;
const char** lines = new const char*[line_ct];
// process
lines[ldx++] = str;
for ( char* p = str; p < end; ++p ) {
switch ( *p ) {
case '\n':
assert(ldx < line_ct);
lines[ldx++] = p + 1;
case '\r':
*p = 0;
break;
default: ;
}
}
// beep boop
for ( size_t idx = 0; idx < line_ct; ++idx )
printf("%i %s\n",idx,lines[idx]);
// clean-up
delete[] lines;
delete[] str;
}
I2luY2x1ZGUgPGNzdHJpbmc+CiNpbmNsdWRlIDxjc3RkaW8+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxjYXNzZXJ0PgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgdW5zaWduZWQgc2l6ZV90OwoKY2hhciogcmVhZF9hbGxfdGV4dChjb25zdCBjaGFyKiBfdW51c2VkLCBzaXplX3QqIGxlbiApIHsKCWNvbnN0IGNoYXIqIGJ1ZiA9ICJUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBzXG5vdmVyXG5cbnRoZSBsYXp5IGRvZy4iOwoJc2l6ZV90IEwgPSBzdHJsZW4oYnVmKTsKCgljaGFyKiBwID0gbmV3IGNoYXJbTCsxXTsKCXN0cmNweShwLGJ1Zik7CglwW0xdID0gMDsKCgkqbGVuID0gTDsKCglyZXR1cm4gcDsKfQoKaW50IG1haW4oKSB7Cgljb25zdCBjaGFyKiBwYXRoID0gbnVsbHB0cjsKCgkvLyByZWFkCglzaXplX3QgbGVuID0gMDsKCWNoYXIqIHN0ciA9IHJlYWRfYWxsX3RleHQocGF0aCwmbGVuKTsKCWNvbnN0IGNoYXIqIGVuZCA9IHN0ciArIGxlbjsKCgkvLyBjb3VudCBhbmQgYWxsb2NhdGUKCXNpemVfdCBsaW5lX2N0ID0gY291bnQoKGNvbnN0IGNoYXIqKXN0cixlbmQsJ1xuJykgKyAxOwoKCXNpemVfdCBsZHggPSAwOwoJY29uc3QgY2hhcioqIGxpbmVzID0gbmV3IGNvbnN0IGNoYXIqW2xpbmVfY3RdOwoKCS8vIHByb2Nlc3MKCWxpbmVzW2xkeCsrXSA9IHN0cjsKCWZvciAoIGNoYXIqIHAgPSBzdHI7IHAgPCBlbmQ7ICsrcCApIHsKCQlzd2l0Y2ggKCAqcCApIHsKCQkJY2FzZSAnXG4nOgoJCQkJYXNzZXJ0KGxkeCA8IGxpbmVfY3QpOwoJCQkJbGluZXNbbGR4KytdID0gcCArIDE7CgkJCWNhc2UgJ1xyJzoKCQkJCSpwID0gMDsKCQkJCWJyZWFrOwoKCQkJZGVmYXVsdDogOwoJCX0KCX0KCgkvLyBiZWVwIGJvb3AKCWZvciAoIHNpemVfdCBpZHggPSAwOyBpZHggPCBsaW5lX2N0OyArK2lkeCApCgkJcHJpbnRmKCIlaSAlc1xuIixpZHgsbGluZXNbaWR4XSk7CgoJLy8gY2xlYW4tdXAKCWRlbGV0ZVtdIGxpbmVzOwoJZGVsZXRlW10gc3RyOwp9