八戒253 发表于 2021-3-21 10:13:56

C Primer Plus Problem

    #include <stdio.h>
#include <string.h>
#define SIZE 100
#define answer "Grant"
char *s_gets(char * st, int n)
{
    int i =0;
    char *ret_val;
    ret_val = fgets(st,n,stdin);
    if (ret_val)
    {
      while(st!='\n' && st != '\0')
      i++;
      if(st == '\n')
      st = '\0';
      else
      while(getchar() != '\n')
      continue;
    }
    return ret_val;
}
int main(void)
{
    char *try;
    s_gets(try,100);
    puts("Who is buried in Grant's dig?");
    while(try != answer)
    {
      printf("No,that's wrong. Try aggin");
      s_gets(try,SIZE);
    }
    puts("Right!DO a good job!");
    return 0;
}《C Primer Plus 》上的例子 说---------------------answer 和 try 都是指针,这我就不明白了?真的吗?求背后原理
{:10_327:}
谢谢你们啦!!!!!!!!!

巴巴鲁 发表于 2021-3-21 10:40:06

try是个止震板毫无疑问
另一个实验一下就知道了,另外宏变量最好全部大写

#include <stdio.h>
#include <string.h>
#define SIZE 100
#define answer "Grant"

int main(void)
{
    printf("%s\n", answer+1);
    /*
    实际上,宏定义的字符串常量在预编译的时候把answer替换成字符串常量(“Grant”);
        所以answer+1可以理解为“Grant”+1 即常量首地址+1,故输出“rant”.
    */
    printf("%c\n", answer); // 当成数组来使用
    return 0;
}
页: [1]
查看完整版本: C Primer Plus Problem