Кажется, вы немного запутались со строками, массивами и указателями.
char str[] = "abc abc abc 123";
означает, что где-то в памяти у вас есть массив с этими символами.при таком объявлении 'str' является константой и не может быть установлен, чтобы указывать куда-то еще.
вместо этого вам нужно назначить каждый отдельный символ, который является своего рода тем, что вы начали делать в своей функции с помощью оператора tempStr[j] = str[i]:
вам нужно перебрать символы в str и проверить каждый символ, затем назначить char для tempStr, который должен быть не меньше, чем исходный массив str [].
что-то вроде
char *tempStr = calloc( strlen( str ) + 1, 1 ); // allocates a buffer +1 char for \0
for (int i = 0, j = 0; i < strlen( str ); ++i)
{
if (!isdigit(str[i]) && (!isspace(str[i])))
{
tempStr[j++] = str[i];
printf("%c", str[i]);
}
}
теперь вы удалили некоторые символы из str [], однако теперь вам нужно переместить содержимое tempStr в str, это можно сделать с помощью strcpy:
strcpy( str, tempStr );
затем освободите буфер
free( tempStr );
и Боб станет вашим дядей.