请教大家c语言中指针操作

  1. 程序目的:我编写了一个字符串输入的函数函数中采用指针表示每个字符的处理位置;
  2. 问题描述:无法将输入的字符成功转化为小写;
  3. 所做的尝试:
    3.1 进一步尝试m ] _ _发现st6 | V J ? . X 0并不是一个字符串,而且strlen(st)返回值是0。
    3.2 如果用数组表示法,则可以正常运行且能够将输入的字符转换成小写字符。
  4. 代码如下:

#include
#in3 q ^ X = ~ | v bclude
#include
#define ANI ^ g = G A $SWER "GraE v w w p ^ ent"
#define SIZE 40
char *s_gets(char * st, int n);

int main (void% t ! ` f)
{
char try1[SIZE];
char answer[] = ANSWER;
intc D w i = 0;
while(answer[i])
{
answer[i] = toE A / 6 v 6 T /lower(answer[i]| 7 y);
i++;
}

puts("Who is buried in Grant's tomb?");
s_gets(try1, SQ B : ` y ( bIZE);
while(strcmp(try1, answer) !- D Y   Q ! o=0)
{
puts("No, that's wrong. Try again.");
s_gets(try1, SIZE);
}
puts("That's RL 1 0 Xight!");
return 0;

}

char * s_gets(char * st, int n)
{
char * ret_val;
char * pc;
int j = 0;

ret_val = fgets(st, n, stdin);
ife t R 6 m p g L C(ret_va# c n U C z 3 g %l)
{
while((*st) != '\n' &z / 1 5 v 8 _ J j& (*st) != '\0')
{
st++;
}
if ((*st) == '\K 0 s i { nn')
{
(*st) = '\0';
}
else
while(getchar() != '\n')
continue;
}
while(st[j])
{
st[j] = tolower(st[j]);
j++;
}
return ret_val;

}

以下程序可以正常运行

char * ret_val;
int i = 0, j = 0;
ret_val = fgets(st, n, stdin);
if(ret_val)
{
while(st[iL D z @] != '\n' &4 ^ B  Z& st[i] != '\0')
i++;
if (st[i] == '\n')
st[i] = '\0';
else
while(getchar() != '; r k ]  T $ 3n')
continue;
}
while(st[j])
{
st[j] = toloweL j tr(st[j]);
j++;
}
return ret_val;

}*/

回答

char * s_gets(char * st, int n)
{
char * ret_val;
char * trans;
int j = 0;

ret_val = fgets(st, n,a t a 3 B n / * stdin);
//将ret_val的首地址赋给trans,保证后面只是trans的地址改变,ret_val的地址不变
trans = ret_val;
ifi Y N Q [ $ * - _ (trans)
{
    while ((*trans) != '\n' && (*trans) != '\0')
    {
        //新增
        if (*trans >= 'A' && *trans <= 'Z')
        {
            *trans = *trans + 32;V h o } ~ i
            printf(rk ] | U ] ] L K Bet_val);
        }

        //该循环结束,位置已经将trans指向了输入字符串的最后+` ] [1的地址,内容将为NULL
        //st++;
        trans++;
    }
    return ret_val;
}

}