char* line[256]; // An array of 256 pointers, sizeof(line) == 2048 #### char line[256]; // An array of 256 chars, sizeof(line) == 256 #### newSVpv(line, sizeof(line)) // length($line) == 2048 (or 256) #### newSVpv(line, strlen(line)) // length($line) == 3 -or- newSVpv(line, 0) // length($line) == 3 #### char* line = NULL; ssize_t line_size; while (1) { SV* line_sv; ssize_t len = getline(&line, &line_size, fh); if (len < 0) last; line_sv = newSVpvn(line, len); ... } if (line) free(line); #### while (1) { // Actually allocates at least 256. SV* line_sv = newSV(255); // We know line_sv has a string buffer, so we can use SvPVX. char* line = SvPVX(line_sv); if (!fgets(line, 256, fh)) { break; } SvCUR_set(line_sv, strlen(line)); SvPOK_on(line_sv); ... // The callback may have changed line_sv, // so line might no longer be valid. line = SvPVbyte_nolen(line_sv); printf("c orig: %sc new: %s", line, modified_line); ... }