>>564
1番
#include <stdio.h>
#include<stdlib.h>

int main(void)
{
char *str;
int i=0;
str=(char *)malloc(sizeof(char)*50);
fgets(str,50,stdin);
while(str[i]!='\0')
putchar(str[i++]);
free(str);
return 0;
}

こういうのってポインタを使ったって言って良いのかな。
putchar(*(str+i++));みたいに分かりやすくポインタしてないとダメ…?