* You're using `printf` to print a single `char`: printf("%c", aux[j]); `printf` is a very handy tool to format output, but it carries quite a bit of overhead with it – not something you want to call over and over without a good reason. A much more efficient way to print a single `char` to `stdout` would be: putchar(aux[j]); Or, instead of looping over the string to print it character-by-character, you can print the whole thing with just one function call: puts(aux); (Note that `puts` prints an additional newline character at the end of the string. If you want to avoid that, use `fputs(aux, stdout)` instead.) `puts` and `fputs` require the string (`aux`) to be terminated by a NUL-character (`'\0'`), which it isn't in your program. If you want to print a character sequence of known length (but possibly without such a terminator character), you can use: fwrite(aux, 1, strlen(n), stdout); * You can also use `puts` or `fputs` to print all the string literals in your program with less overhead, e. g. puts("\nWelcome to the super, duper string inverter!"); instead of printf("\nWelcome to the super, duper string inverter!\n"); Now you don't even need to worry about `%` characters being interpreted as format descriptors. * You can concatenate string literals that are printed right after each other to avoid the overhead of additional buffering and I/O locking and unlocking: fputs("Included with the super mojo from the string inverter, this is the result: ", stdout); If you don't like long string literals you can break them into multiple parts: fputs("Included with the super mojo from the string inverter, " "this is the result: ", stdout); produces exactly the same syntax tree and binary code as the source code just before.