#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFFSIZE 3 /* >= 2, e.g. 1024 */
char *mygetline(FILE *fp) {
static char inbuff[BUFFSIZE];
char *outbuff_malloc, *tmpbuff;
char *p, *r;
int fEOL;
if ((outbuff_malloc
= malloc(1)) == NULL
) { return NULL;
}
*outbuff_malloc = '\0';
fEOL = 0;
do {
r
= fgets(inbuff
, BUFFSIZE
, fp
); if (r == NULL)
break;
for (p = inbuff; *p != '\0'; p++)
;
if (*(p - 1) == '\n')
fEOL = 1;
if ((tmpbuff
= realloc(outbuff_malloc
, strlen(outbuff_malloc
) + strlen(inbuff
) + 1)) == NULL
) { return NULL;
}
outbuff_malloc = tmpbuff;
} while (!fEOL);
if (strlen(outbuff_malloc
) > 0) { char c;
for (p = outbuff_malloc; *p != '\0'; p++)
;
while ((c = *(--p)) == '\n' || c == '\r')
*p = '\0';
return outbuff_malloc;
}
return NULL;
}
struct vector {
int *array;
int n;
};
void init_vector(struct vector *a) {
a->array = 0;
a->n = 0;
}
void release_vector(struct vector *a) {
a->n = 0;
}
void set_vector(struct vector *a, int i, int v) {
int *new_array;
if (a->n <= i) {
new_array
= malloc(sizeof(int) * (i
+ 1)); if (a->array != 0) {
memcpy(new_array
, a
->array
, sizeof(int) * a
->n
); }
a->array = new_array;
a->n = i + 1;
}
a->array[i] = v;
}
int get_vector(struct vector *a, int i) {
if (i < a->n)
return a->array[i];
return 0;
}
int main() {
char *p, *nextp;
struct vector a; init_vector(&a);
int tmp_value;
int n = 0;
while ((p = mygetline(stdin)) != 0) {
do {
tmp_value
= strtol(p
, &nextp
, 10); printf("n = %d, tmp_value = %d\n", n
, tmp_value
); set_vector(&a, n++, tmp_value);
p = nextp;
} while(*p != 0);
}
for (int i = 0; i < n; i++)
printf("%d: %d\n", i
, get_vector
(&a
, i
));
release_vector(&a);
return 0;
}
/* end */
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKI2RlZmluZSBCVUZGU0laRSAzIC8qID49IDIsIGUuZy4gMTAyNCAqLwpjaGFyICpteWdldGxpbmUoRklMRSAqZnApIHsKICBzdGF0aWMgY2hhciBpbmJ1ZmZbQlVGRlNJWkVdOwogIGNoYXIgKm91dGJ1ZmZfbWFsbG9jLCAqdG1wYnVmZjsKICBjaGFyICpwLCAqcjsKICBpbnQgZkVPTDsKIAogIGlmICgob3V0YnVmZl9tYWxsb2MgPSBtYWxsb2MoMSkpID09IE5VTEwpIHsKICAgIHJldHVybiBOVUxMOwogIH0KICAqb3V0YnVmZl9tYWxsb2MgPSAnXDAnOwogIGZFT0wgPSAwOwogIGRvIHsKICAgIHIgPSBmZ2V0cyhpbmJ1ZmYsIEJVRkZTSVpFLCBmcCk7CiAgICBpZiAociA9PSBOVUxMKQogICAgICBicmVhazsKICAgIGZvciAocCA9IGluYnVmZjsgKnAgIT0gJ1wwJzsgcCsrKQogICAgICA7CiAgICBpZiAoKihwIC0gMSkgPT0gJ1xuJykKICAgICAgZkVPTCA9IDE7CiAgICBpZiAoKHRtcGJ1ZmYgPSByZWFsbG9jKG91dGJ1ZmZfbWFsbG9jLCBzdHJsZW4ob3V0YnVmZl9tYWxsb2MpICsgc3RybGVuKGluYnVmZikgKyAxKSkgPT0gTlVMTCkgewogICAgICBmcmVlKG91dGJ1ZmZfbWFsbG9jKTsKICAgICAgcmV0dXJuIE5VTEw7CiAgICB9CiAgICBzdHJjYXQodG1wYnVmZiwgaW5idWZmKTsKICAgIG91dGJ1ZmZfbWFsbG9jID0gdG1wYnVmZjsKICB9IHdoaWxlICghZkVPTCk7CiAgaWYgKHN0cmxlbihvdXRidWZmX21hbGxvYykgPiAwKSB7CiAgICBjaGFyIGM7CiAgICBmb3IgKHAgPSBvdXRidWZmX21hbGxvYzsgKnAgIT0gJ1wwJzsgcCsrKQogICAgICA7CiAgICB3aGlsZSAoKGMgPSAqKC0tcCkpID09ICdcbicgfHwgYyA9PSAnXHInKQogICAgICAqcCA9ICdcMCc7CiAgICByZXR1cm4gb3V0YnVmZl9tYWxsb2M7CiAgfQogIGZyZWUob3V0YnVmZl9tYWxsb2MpOwogIHJldHVybiBOVUxMOwp9CgpzdHJ1Y3QgdmVjdG9yIHsKICBpbnQgKmFycmF5OwogIGludCBuOwp9OwoKdm9pZCBpbml0X3ZlY3RvcihzdHJ1Y3QgdmVjdG9yICphKSB7CiAgYS0+YXJyYXkgPSAwOwogIGEtPm4gPSAwOwp9Cgp2b2lkIHJlbGVhc2VfdmVjdG9yKHN0cnVjdCB2ZWN0b3IgKmEpIHsKICBmcmVlKGEtPmFycmF5KTsKICBhLT5uID0gMDsKfQoKCnZvaWQgc2V0X3ZlY3RvcihzdHJ1Y3QgdmVjdG9yICphLCBpbnQgaSwgaW50IHYpIHsKICBpbnQgKm5ld19hcnJheTsKICBpZiAoYS0+biA8PSBpKSB7CiAgICBuZXdfYXJyYXkgPSBtYWxsb2Moc2l6ZW9mKGludCkgKiAoaSArIDEpKTsKICAgIGlmIChhLT5hcnJheSAhPSAwKSB7CiAgICAgIG1lbWNweShuZXdfYXJyYXksIGEtPmFycmF5LCBzaXplb2YoaW50KSAqIGEtPm4pOwogICAgICBmcmVlKGEtPmFycmF5KTsKICAgIH0KICAgIGEtPmFycmF5ID0gbmV3X2FycmF5OwogICAgYS0+biA9IGkgKyAxOwogIH0KICBhLT5hcnJheVtpXSA9IHY7Cn0KCmludCBnZXRfdmVjdG9yKHN0cnVjdCB2ZWN0b3IgKmEsIGludCBpKSB7CiAgaWYgKGkgPCBhLT5uKQogICAgcmV0dXJuIGEtPmFycmF5W2ldOwogIHJldHVybiAwOwp9CgppbnQgbWFpbigpIHsKICBjaGFyICpwLCAqbmV4dHA7CiAgc3RydWN0IHZlY3RvciBhOyBpbml0X3ZlY3RvcigmYSk7CgogIGludCB0bXBfdmFsdWU7CiAgaW50IG4gPSAwOwoKICB3aGlsZSAoKHAgPSBteWdldGxpbmUoc3RkaW4pKSAhPSAwKSB7CiAgICBwcmludGYoIjwlcz5cbiIsIHApOwogICAgZG8gewogICAgICB0bXBfdmFsdWUgPSBzdHJ0b2wocCwgJm5leHRwLCAxMCk7CiAgICAgIHByaW50ZigibiA9ICVkLCB0bXBfdmFsdWUgPSAlZFxuIiwgbiwgdG1wX3ZhbHVlKTsKICAgICAgc2V0X3ZlY3RvcigmYSwgbisrLCB0bXBfdmFsdWUpOwogICAgICBwID0gbmV4dHA7CiAgICB9IHdoaWxlKCpwICE9IDApOwogIH0KICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKICAgIHByaW50ZigiJWQ6ICVkXG4iLCBpLCBnZXRfdmVjdG9yKCZhLCBpKSk7CgogIHJlbGVhc2VfdmVjdG9yKCZhKTsKICBmcmVlKHApOwogIHJldHVybiAwOwp9Ci8qIGVuZCAqLwo=