Interesting printf() glitch in C while converting bases -
i have following code in c:
char* getbase(unsigned int a, int base) { char buffer[33]; char digits[] = "0123456789abcdef"; if(base < 2 || base > 16) { printf("invalid base"); return null; } char* cn = &buffer[sizeof(buffer) - 1]; *cn = '\0'; { cn -= 1; *cn = digits[a % base]; /= base; } while(a > 0); printf("\n"); //here return cn; } int main() { printf("%s", getbase(8, 2)); return 0; } as can see, takes base 10 number, , converts between base 2 , base 16. works unless comment out line marked //here. reason, if don't have printf statement, doesn't work. have no idea why happening, explanations?
undefined behavior cause quite weird behavior.
you returning cn in function getbase, pointer points somewhere in local automatic array buffer.
to fix problem, can make buffer static, or use dynamic allocation.
Comments
Post a Comment