Three mistakes, 1. scanf("%s", &my_string); should be scanf("%s", my_string); 2. char * new_string = (char *) malloc(sizeof(char) * (length + 1)); should be char * new_string = (char *) malloc(sizeof(char) * (length + 2)); 3. for (i = 0; i < length; i++) should be for (i = 0; i < (length + 1); i++) The correct version is the following code, #include #include int string_length(char * my_string) { int counter = 0; while(1) { if (my_string[counter] != 0) { counter++; } else { break; } } return counter; } int main() { char * my_string = (char *) malloc(sizeof(char) * 10); printf("please enter a string:\n"); scanf("%s", my_string); int length = string_length(my_string); char * new_string = (char *) malloc(sizeof(char) * (length + 2)); new_string[0] = '?'; int i; for (i = 0; i < (length + 1); i++) { new_string[i+1] = my_string[i]; } printf("new_string = %s\n", new_string); free(new_string); }