Во-первых, вы написали, что функция должна возвращать значение указателя, но ваш тип возвращаемого значения - просто char, измените его на char * sortString .
Во-вторых, вы освобождаете память перед возвратом. это означает, что вы ничего не возвращаете, удалите эту строку. вам нужно объявить переменную-указатель в главном функционале, который получает abcorder от sortString, и эту переменную вы должны освободить в конце программы.
В-третьих, вам нужно вернуть адрес указателя, а непеременная указателя, измените ее с * newabcorder на return newabcorder .
Фиксированная функция:
char* sortString(char *characters) {
int i = 0;
int j = 0;
int lengthofstring;
char *throwaway;
char *newabcorder;
char anotherthrowaway;
lengthofstring = strlen(characters);
newabcorder = (char*)malloc(lengthofstring + 1);
printf("Enter a string you want alphabetized: \n");
throwaway = characters;
for (anotherthrowaway = 'a'; anotherthrowaway <= 'z'; anotherthrowaway++) {
for (i = 0; i < lengthofstring; i++) {
if (*throwaway == anotherthrowaway) {
*(newabcorder + j) = *throwaway;
j++;
}
throwaway++;
}
throwaway = characters;
}
*(newabcorder + j) = '\0';
strcpy(characters, newabcorder);
return newabcorder;
}
и основная функция:
int main() {
char str[50], *ptr;
fgets(str, 49, stdin);
ptr = sortString(str);
printf("%s \n", ptr);
free(ptr);
}