original code increments len before allocating which is unnecessary.
removed --len, combined the copying and converting to one step in while
#include <stdlib.h> #include <string.h> #include <ctype.h> char *fun(const char *input) { size_t len = strlen(input); char *result = malloc(len + 1); char *p = result; while ((*p++ = toupper(*input++))); return result; }
- #include <stdlib.h>
- #include <string.h>
- #include <ctype.h>
char *fun(const char *input){size_t len = strlen(input);char *result = malloc(++len), *p = result;while (len--)*p++ = toupper(*input++);return result;- char *fun(const char *input) {
- size_t len = strlen(input);
- char *result = malloc(len + 1);
- char *p = result;
- while ((*p++ = toupper(*input++)));
- return result;
- }