#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int test(char **output, int *output_len) {
int old_output_len;
printf("\ninner before: %d\n", *output
);
// Add text first time
old_output_len = *output_len;
*output_len += 11;
*output
= realloc(*output
, *output_len
); memset(*output
+ old_output_len
, 0, 11); *output
= strcat(*output
, "this is 11");
/*
// Extend text
old_output_len = *output_len;
*output_len += 11;
printf("%d\t", *output_len * sizeof(char));
// Ignore, now this doesn't get new pointer, unlike in previous code! but it still works though
&output = realloc(output, *output_len * sizeof(char));
memset(output + old_output_len, 0, 11);
*output = strcat(&output, "this is 11");
printf("%d\n", output);
printf("\ninner after: %d\n", output);*/
}
int main() {
char *output = NULL;
int output_len = 0;
printf("\nbefore: %d\n", &output
); test(&output, &output_len);
printf("\nafter:%d\n", &output
);
// This prints 0, wasn't output pointer updated by test?
//system("pause");
return EXIT_SUCCESS;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgogCmludCB0ZXN0KGNoYXIgKipvdXRwdXQsIGludCAqb3V0cHV0X2xlbikgewogICAgaW50IG9sZF9vdXRwdXRfbGVuOwogCiAgICBwcmludGYoIlxuaW5uZXIgYmVmb3JlOiAlZFxuIiwgKm91dHB1dCk7CiAKICAgIC8vIEFkZCB0ZXh0IGZpcnN0IHRpbWUKICAgIG9sZF9vdXRwdXRfbGVuID0gKm91dHB1dF9sZW47CiAgICAqb3V0cHV0X2xlbiArPSAxMTsKICAgIHByaW50ZigiJWRcdCIsICpvdXRwdXRfbGVuKTsKIAogICAgKm91dHB1dCA9IHJlYWxsb2MoKm91dHB1dCwgKm91dHB1dF9sZW4pOwogICAgbWVtc2V0KCpvdXRwdXQgKyBvbGRfb3V0cHV0X2xlbiwgMCwgMTEpOwogICAgKm91dHB1dCA9IHN0cmNhdCgqb3V0cHV0LCAidGhpcyBpcyAxMSIpOwogICAgcHJpbnRmKCIlZFxuIiwgKm91dHB1dCk7CiAKIC8qCiAgICAvLyBFeHRlbmQgdGV4dAogICAgb2xkX291dHB1dF9sZW4gPSAqb3V0cHV0X2xlbjsKICAgICpvdXRwdXRfbGVuICs9IDExOwogICAgcHJpbnRmKCIlZFx0IiwgKm91dHB1dF9sZW4gKiBzaXplb2YoY2hhcikpOwogCiAgICAvLyBJZ25vcmUsIG5vdyB0aGlzIGRvZXNuJ3QgZ2V0IG5ldyBwb2ludGVyLCB1bmxpa2UgaW4gcHJldmlvdXMgY29kZSEgYnV0IGl0IHN0aWxsIHdvcmtzIHRob3VnaAogICAgJm91dHB1dCA9IHJlYWxsb2Mob3V0cHV0LCAqb3V0cHV0X2xlbiAqIHNpemVvZihjaGFyKSk7CiAgICBtZW1zZXQob3V0cHV0ICsgb2xkX291dHB1dF9sZW4sIDAsIDExKTsKICAgICpvdXRwdXQgPSBzdHJjYXQoJm91dHB1dCwgInRoaXMgaXMgMTEiKTsKICAgIHByaW50ZigiJWRcbiIsIG91dHB1dCk7CiAgICBwcmludGYoIlxuaW5uZXIgYWZ0ZXI6ICVkXG4iLCBvdXRwdXQpOyovCn0KIAppbnQgbWFpbigpIHsKICAgIGNoYXIgKm91dHB1dCA9IE5VTEw7CiAgICBpbnQgb3V0cHV0X2xlbiA9IDA7CiAKICAgIHByaW50ZigiXG5iZWZvcmU6ICVkXG4iLCAmb3V0cHV0KTsKICAgIHRlc3QoJm91dHB1dCwgJm91dHB1dF9sZW4pOwogICAgcHJpbnRmKCJcbmFmdGVyOiVkXG4iLCAmb3V0cHV0KTsKIAogICAgLy8gVGhpcyBwcmludHMgMCwgd2Fzbid0IG91dHB1dCBwb2ludGVyIHVwZGF0ZWQgYnkgdGVzdD8KICAgIHByaW50ZigiXG5cbiVkXG5cbiIsIG91dHB1dCk7CiAgICBwcmludGYoIiVkXG4iLCBvdXRwdXRfbGVuKTsKIAogICAgZnJlZShvdXRwdXQpOwogICAgLy9zeXN0ZW0oInBhdXNlIik7CiAKICAgIHJldHVybiBFWElUX1NVQ0NFU1M7Cn0K