In my case, the program was designed to take a list of files in argv and work with them. But because of how C works, I can just leave all that data in the original argv array. Need string lengths? Iterate across argv subtracting the two pointers. This will break should argv be non-contiguous. This is not guaranteed by spec, but I haven't found a case where it breaks. And this is what it feels like to code in C: you come face to face with the difference between spec and reality. Because the project is hardly mission critical, ship it. When you can test and verify absolutely that this does not break on all the cases that you're responsible for, and you've documented the potential for breakage, and heavens, even added checking code to validate your assumption, is a different solution called for? Of course not. Is it "bad code"? Well, bad for what? Bad for other coders, sure. But it works, it's tight, and it wasn't hard to debug or reason about.