zoukankan      html  css  js  c++  java
  • C语言库函数大全及应用实例九

                                                   [编程资料]C语言库函数大全及应用实例九

    函数名: mktemp
    功 能: 建立唯一的文件名
    用 法: char *mktemp(char *template);
    程序例:

    #i nclude
    #i nclude

    int main(void)
    {
    /* fname defines the template for the
    temporary file. */

    char *fname = "TXXXXXX", *ptr;

    ptr = mktemp(fname);
    printf("%s\n",ptr);
    return 0;
    }

    函数名: MK_FP
    功 能: 设置一个远指针
    用 法: void far *MK_FP(unsigned seg, unsigned off);
    程序例:

    #i nclude
    #i nclude

    int main(void)
    {
    int gd, gm, i;
    unsigned int far *screen;

    detectgraph(&gd, &gm);
    if (gd == HERCMONO)
    screen = MK_FP(0xB000, 0);
    else
    screen = MK_FP(0xB800, 0);
    for (i=0; i<26; i++)
    screen[i] = 0x0700 + ('a' + i);
    return 0;
    }

    函数名: modf
    功 能: 把数分为指数和尾数
    用 法: double modf(double value, double *iptr);
    程序例:

    #i nclude
    #i nclude

    int main(void)
    {
    double fraction, integer;
    double number = 100000.567;

    fraction = modf(number, &integer);
    printf("The whole and fractional parts of %lf are %lf and %lf\n",
    number, integer, fraction);
    return 0;
    }

    函数名: movedata
    功 能: 拷贝字节
    用 法: void movedata(int segsrc, int offsrc, int segdest,
    int offdest, unsigned numbytes);
    程序例:

    #i nclude

    #define MONO_BASE 0xB000

    /* saves the contents of the monochrome screen in buffer */
    void save_mono_screen(char near *buffer)
    {
    movedata(MONO_BASE, 0, _DS, (unsigned)buffer, 80*25*2);
    }

    int main(void)
    {
    char buf[80*25*2];
    save_mono_screen(buf);
    }

    函数名: moverel
    功 能: 将当前位置(CP)移动一相对距离
    用 法: void far moverel(int dx, int dy);
    程序例:

    #i nclude
    #i nclude
    #i nclude
    #i nclude

    int main(void)
    {
    /* request auto detection */
    int gdriver = DETECT, gmode, errorcode;
    char msg[80];

    /* initialize graphics and local variables */
    initgraph(&gdriver, &gmode, "");

    /* read result of initialization */
    errorcode = graphresult();
    if (errorcode != grOk) /* an error occurred */
    {
    printf("Graphics error: %s\n", grapherrormsg(errorcode));
    printf("Press any key to halt:");
    getch();
    exit(1); /* terminate with an error code */
    }

    /* move the C.P. to location (20, 30) */
    moveto(20, 30);

    /* plot a pixel at the C.P. */
    putpixel(getx(), gety(), getmaxcolor());

    /* create and output a message at (20, 30) */
    sprintf(msg, " (%d, %d)", getx(), gety());
    outtextxy(20, 30, msg);

    /* move to a point a relative distance */
    /* away from the current value of C.P. */
    moverel(100, 100);

    /* plot a pixel at the C.P. */
    putpixel(getx(), gety(), getmaxcolor());

    /* create and output a message at C.P. */
    sprintf(msg, " (%d, %d)", getx(), gety());
    outtext(msg);

    /* clean up */
    getch();
    closegraph();
    return 0;
    }

    函数名: movetext
    功 能: 将屏幕文本从一个矩形区域拷贝到另一个矩形区域
    用 法: int movetext(int left, int top, int right, int bottom,
    int newleft, int newtop);
    程序例:
    #i nclude
    #i nclude

    int main(void)
    {
    char *str = "This is a test string";

    clrscr();
    cputs(str);
    getch();

    movetext(1, 1, strlen(str), 2, 10, 10);
    getch();

    return 0;
    }

    函数名: moveto
    功 能: 将CP移到(x, y)
    用 法: void far moveto(int x, int y);
    程序例:

    #i nclude
    #i nclude
    #i nclude
    #i nclude

    int main(void)
    {
    /* request auto detection */
    int gdriver = DETECT, gmode, errorcode;
    char msg[80];

    /* initialize graphics and local variables */
    initgraph(&gdriver, &gmode, "");

    /* read result of initialization */
    errorcode = graphresult();
    if (errorcode != grOk) /* an error occurred */
    {
    printf("Graphics error: %s\n", grapherrormsg(errorcode));
    printf("Press any key to halt:");
    getch();
    exit(1); /* terminate with an error code */
    }

    /* move the C.P. to location (20, 30) */
    moveto(20, 30);

    /* plot a pixel at the C.P. */
    putpixel(getx(), gety(), getmaxcolor());

    /* create and output a message at (20, 30) */
    sprintf(msg, " (%d, %d)", getx(), gety());
    outtextxy(20, 30, msg);

    /* move to (100, 100) */
    moveto(100, 100);

    /* plot a pixel at the C.P. */
    putpixel(getx(), gety(), getmaxcolor());

    /* create and output a message at C.P. */
    sprintf(msg, " (%d, %d)", getx(), gety());
    outtext(msg);

    /* clean up */
    getch();
    closegraph();
    return 0;
    }

    函数名: movemem
    功 能: 移动一块字节
    用 法: void movemem(void *source, void *destin, unsigned len);
    程序例:

    #i nclude
    #i nclude
    #i nclude
    #i nclude

    int main(void)
    {
    char *source = "Borland International";
    char *destination;
    int length;

    length = strlen(source);
    destination = malloc(length + 1);
    movmem(source,destination,length);
    printf("%s\n",destination);

    return 0;
    }

    函数名: normvideo
    功 能: 选择正常亮度字符
    用 法: void normvideo(void);
    程序例:

    #i nclude

    int main(void)
    {
    normvideo();
    cprintf("NORMAL Intensity Text\r\n");
    return 0;
    }

    函数名: nosound
    功 能: 关闭PC扬声器
    用 法: void nosound(void);
    程序例:

    /* Emits a 7-Hz tone for 10 seconds.

    True story: 7 Hz is the resonant frequency of a chicken's skull cavity.
    This was determined empirically in Australia, where a new factory
    generating 7-Hz tones was located too close to a chicken ranch:
    When the factory started up, all the chickens died.

    Your PC may not be able to emit a 7-Hz tone.
    */

    int main(void)
    {
    sound(7);
    delay(10000);
    nosound();
    }


    void normvideo(void );
    选择正常亮度字符。
    将文本属性(前景和背景)置为启动程序时它所具有的值,来选择标准字符。

    void nosound(void );
    关闭由调用 sound而发声的扬声器。

    函数名: open
    功 能: 打开一个文件用于读或写
    用 法: int open(char *pathname, int access[, int permiss]);
    程序例:

    #i nclude
    #i nclude
    #i nclude
    #i nclude

    int main(void)
    {
    int handle;
    char msg[] = "Hello world";

    if ((handle = open("TEST.$$$", O_CREAT | O_TEXT)) == -1)
    {
    perror("Error:");
    return 1;
    }
    write(handle, msg, strlen(msg));
    close(handle);
    return 0;
    }

    函数名: outport
    功 能: 输出整数到硬件端口中
    用 法: void outport(int port, int value);
    程序例:

    #i nclude
    #i nclude
    int main(void)
    {
    int value = 64;
    int port = 0;

    outportb(port, value);
    printf("Value %d sent to port number %d\n", value, port);
    return 0;
    }

    函数名: outportb
    功 能: 输出字节到硬件端口中
    用 法: void outportb(int port, char byte);
    程序例:

    #i nclude
    #i nclude

    int main(void)
    {
    int value = 64;
    int port = 0;

    outportb(port, value);
    printf("Value %d sent to port number %d\n", value, port);
    return 0;
    }

    函数名: outtext
    功 能: 在视区显示一个字符串
    用 法: void far outtext(char far *textstring);
    程序例:

    #i nclude
    #i nclude
    #i nclude
    #i nclude

    int main(void)
    {
    /* request auto detection */
    int gdriver = DETECT, gmode, errorcode;
    int midx, midy;

    /* initialize graphics and local variables */
    initgraph(&gdriver, &gmode, "");

    /* read result of initialization */
    errorcode = graphresult();
    if (errorcode != grOk) /* an error occurred */
    {
    printf("Graphics error: %s\n", grapherrormsg(errorcode));
    printf("Press any key to halt:");
    getch();
    exit(1); /* terminate with an error code */
    }

    midx = getmaxx() / 2;
    midy = getmaxy() / 2;

    /* move the C.P. to the center of the screen */
    moveto(midx, midy);

    /* output text starting at the C.P. */
    outtext("This ");
    outtext("is ");
    outtext("a ");
    outtext("test.");

    /* clean up */
    getch();
    closegraph();
    return 0;
    }

    函数名: outtextxy
    功 能: 在指定位置显示一字符串
    用 法: void far outtextxy(int x, int y, char *textstring);
    程序例:

    #i nclude
    #i nclude
    #i nclude
    #i nclude

    int main(void)
    {
    /* request auto detection */
    int gdriver = DETECT, gmode, errorcode;
    int midx, midy;

    /* initialize graphics and local variables */
    initgraph( &gdriver, &gmode, "");

    /* read result of initialization */
    errorcode = graphresult();
    if (errorcode != grOk) /* an error occurred */
    {
    printf("Graphics error: %s\n", grapherrormsg(errorcode));
    printf("Press any key to halt:");
    getch();
    exit(1); /* terminate with an error code */
    }

    midx = getmaxx() / 2;
    midy = getmaxy() / 2;

    /* output text at the center of the screen*/
    /* Note: the C.P. doesn't get changed.*/
    outtextxy(midx, midy, "This is a test.");

    /* clean up */
    getch();
    closegraph();
    return 0;
    }

    函数名: parsfnm
    功 能: 分析文件名
    用 法: char *parsfnm (char *cmdline, struct fcb *fcbptr, int option);
    程序例:

    #i nclude
    #i nclude
    #i nclude
    #i nclude

    int main(void)
    {
    char line[80];
    struct fcb blk;

    /* get file name */
    printf("Enter drive and file name (no path - ie. a:file.dat)\n");
    gets(line);

    /* put file name in fcb */
    if (parsfnm(line, &blk, 1) == NULL)
    printf("Error in parsfm call\n");
    else
    printf("Drive #%d Name: %11s\n", blk.fcb_drive, blk.fcb_name);

    return 0;
    }

    函数名: peek
    功 能: 检查存储单元
    用 法: int peek(int segment, unsigned offset);
    程序例:

    #i nclude
    #i nclude
    #i nclude

    int main(void)
    {
    int value = 0;

    printf("The current status of your keyboard is:\n");
    value = peek(0x0040, 0x0017);
    if (value & 1)
    printf("Right shift on\n");
    else
    printf("Right shift off\n");

    if (value & 2)
    printf("Left shift on\n");
    else
    printf("Left shift off\n");

    if (value & 4)
    printf("Control key on\n");
    else
    printf("Control key off\n");

    if (value & 8)
    printf("Alt key on\n");
    else
    printf("Alt key off\n");

    if (value & 16)
    printf("Scroll lock on\n");
    else
    printf("Scroll lock off\n");

    if (value & 32)
    printf("Num lock on\n");
    else
    printf("Num lock off\n");

    if (value & 64)
    printf("Caps lock on\n");
    else
    printf("Caps lock off\n");

    return 0;
    }

    函数名: peekb
    功 能: 检查存储单元
    用 法: char peekb (int segment, unsigned offset);
    程序例:

    #i nclude
    #i nclude
    #i nclude

    int main(void)
    {
    int value = 0;

    printf("The current status of your keyboard is:\n");
    value = peekb(0x0040, 0x0017);
    if (value & 1)
    printf("Right shift on\n");
    else
    printf("Right shift off\n");

    if (value & 2)
    printf("Left shift on\n");
    else
    printf("Left shift off\n");

    if (value & 4)
    printf("Control key on\n");
    else
    printf("Control key off\n");

    if (value & 8)
    printf("Alt key on\n");
    else
    printf("Alt key off\n");

    if (value & 16)
    printf("Scroll lock on\n");
    else
    printf("Scroll lock off\n");

    if (value & 32)
    printf("Num lock on\n");
    else
    printf("Num lock off\n");

    if (value & 64)
    printf("Caps lock on\n");
    else
    printf("Caps lock off\n");

    return 0;
    }

    函数名: perror
    功 能: 系统错误信息
    用 法: void perror(char *string);
    程序例:

    #i nclude

    int main(void)
    {
    FILE *fp;

    fp = fopen("perror.dat", "r");
    if (!fp)
    perror("Unable to open file for reading");
    return 0;
    }

    函数名: pieslice
    功 能: 绘制并填充一个扇形
    用 法: void far pieslice(int x, int stanle, int endangle, int radius);
    程序例:

    #i nclude
    #i nclude
    #i nclude
    #i nclude

    int main(void)
    {
    /* request auto detection */
    int gdriver = DETECT, gmode, errorcode;
    int midx, midy;
    int stangle = 45, endangle = 135, radius = 100;

    /* initialize graphics and local variables */
    initgraph(&gdriver, &gmode, "");

    /* read result of initialization */
    errorcode = graphresult();
    if (errorcode != grOk) /* an error occurred */
    {
    printf("Graphics error: %s\n", grapherrormsg(errorcode));
    printf("Press any key to halt:");
    getch();
    exit(1); /* terminate with an error code */
    }

    midx = getmaxx() / 2;
    midy = getmaxy() / 2;

    /* set fill style and draw a pie slice */
    setfillstyle(EMPTY_FILL, getmaxcolor());
    pieslice(midx, midy, stangle, endangle, radius);

    /* clean up */
    getch();
    closegraph();
    return 0;
    }

    函数名: poke
    功 能: 存值到一个给定存储单元
    用 法: void poke(int segment, int offset, int value);
    程序例:

    #i nclude
    #i nclude

    int main(void)
    {
    clrscr();
    cprintf("Make sure the scroll lock key is off and press any key\r\n");
    getch();
    poke(0x0000,0x0417,16);
    cprintf("The scroll lock is now on\r\n");
    return 0;
    }

    函数名: pokeb
    功 能: 存值到一个给定存储单元
    用 法: void pokeb(int segment, int offset, char value);
    程序例:

    #i nclude
    #i nclude

    int main(void)
    {
    clrscr();
    cprintf("Make sure the scroll lock key is off and press any key\r\n");
    getch();
    pokeb(0x0000,0x0417,16);
    cprintf("The scroll lock is now on\r\n");
    return 0;
    }

    函数名: poly
    功 能: 根据参数产生一个多项式
    用 法: double poly(double x, int n, double c[]);
    程序例:

    #i nclude
    #i nclude

    /* polynomial: x**3 - 2x**2 + 5x - 1 */

    int main(void)
    {
    double array[] = { -1.0, 5.0, -2.0, 1.0 };
    double result;

    result = poly(2.0, 3, array);
    printf("The polynomial: x**3 - 2.0x**2 + 5x - 1 at 2.0 is %lf\n",
    result);
    return 0;
    }

    函数名: pow
    功 能: 指数函数(x的y次方)
    用 法: double pow(double x, double y);
    程序例:

    #i nclude
    #i nclude

    int main(void)
    {
    double x = 2.0, y = 3.0;

    printf("%lf raised to %lf is %lf\n", x, y, pow(x, y));
    return 0;
    }

    函数名: pow10
    功 能: 指数函数(10的p次方)
    用 法: double pow10(int p);
    程序例:

    #i nclude
    #i nclude

    int main(void)
    {
    double p = 3.0;

    printf("Ten raised to %lf is %lf\n", p, pow10(p));
    return 0;
    }

    函数名: printf
    功 能: 产生格式化输出的函数
    用 法: int printf(char *format...);
    程序例:

    #i nclude
    #i nclude

    #define I 555
    #define R 5.5

    int main(void)
    {
    int i,j,k,l;
    char buf[7];
    char *prefix = buf;
    char tp[20];
    printf("prefix 6d 6o 8x 10.2e "
    "10.2f\n");
    strcpy(prefix,"%");
    for (i = 0; i < 2; i++)
    {
    for (j = 0; j < 2; j++)
    for (k = 0; k < 2; k++)
    for (l = 0; l < 2; l++)
    {
    if (i==0) strcat(prefix,"-");
    if (j==0) strcat(prefix,"+");
    if (k==0) strcat(prefix,"#");
    if (l==0) strcat(prefix,"0");
    printf("%5s |",prefix);
    strcpy(tp,prefix);
    strcat(tp,"6d |");
    printf(tp,I);
    strcpy(tp,"");
    strcpy(tp,prefix);
    strcat(tp,"6o |");
    printf(tp,I);
    strcpy(tp,"");
    strcpy(tp,prefix);
    strcat(tp,"8x |");
    printf(tp,I);
    strcpy(tp,"");
    strcpy(tp,prefix);
    strcat(tp,"10.2e |");
    printf(tp,R);
    strcpy(tp,prefix);
    strcat(tp,"10.2f |");
    printf(tp,R);
    printf(" \n");
    strcpy(prefix,"%");
    }
    }
    return 0;
    }


    函数名: putc
    功 能: 输出一字符到指定流中
    用 法: int putc(int ch, FILE *stream);
    程序例:

    #i nclude

    int main(void)
    {
    char msg[] = "Hello world\n";
    int i = 0;

    while (msg[i])
    putc(msg[i++], stdout);
    return 0;
    }

    函数名: putch
    功 能: 输出字符到控制台
    用 法: int putch(int ch);
    程序例:

    #i nclude
    #i nclude

    int main(void)
    {
    char ch = 0;

    printf("Input a string:");
    while ((ch != '\r'))
    {
    ch = getch();
    putch(ch);
    }
    return 0;
    }

    函数名: putchar
    功 能: 在stdout上输出字符
    用 法: int putchar(int ch);
    程序例:

    #i nclude

    /* define some box-drawing characters */
    #define LEFT_TOP 0xDA
    #define RIGHT_TOP 0xBF
    #define HORIZ 0xC4
    #define VERT 0xB3
    #define LEFT_BOT 0xC0
    #define RIGHT_BOT 0xD9

    int main(void)
    {
    char i, j;

    /* draw the top of the box */
    putchar(LEFT_TOP);
    for (i=0; i<10; i++)
    putchar(HORIZ);
    putchar(RIGHT_TOP);
    putchar('\n');

    /* draw the middle */
    for (i=0; i<4; i++)
    {
    putchar(VERT);
    for (j=0; j<10; j++)
    putchar(' ');
    putchar(VERT);
    putchar('\n');
    }

    /* draw the bottom */
    putchar(LEFT_BOT);
    for (i=0; i<10; i++)
    putchar(HORIZ);
    putchar(RIGHT_BOT);
    putchar('\n');

    return 0;
    }

    函数名: putenv
    功 能: 把字符串加到当前环境中
    用 法: int putenv(char *envvar);
    程序例:

    #i nclude
    #i nclude
    #i nclude
    #i nclude
    #i nclude

    int main(void)
    {
    char *path, *ptr;
    int i = 0;

    /* get the current path environment */
    ptr = getenv("PATH");

    /* set up new path */
    path = malloc(strlen(ptr)+15);
    strcpy(path,"PATH=");
    strcat(path,ptr);
    strcat(path,";c:\\temp");

    /* replace the current path and display current environment */
    putenv(path);
    while (environ[i])
    printf("%s\n",environ[i++]);

    return 0;
    }

    函数名: putimage
    功 能: 在屏幕上输出一个位图
    用 法: void far putimage(int x, int y, void far *bitmap, int op);
    程序例:

    #i nclude
    #i nclude
    #i nclude
    #i nclude

    #define ARROW_SIZE 10

    void draw_arrow(int x, int y);

    int main(void)
    {
    /* request autodetection */
    int gdriver = DETECT, gmode, errorcode;
    void *arrow;
    int x, y, maxx;
    unsigned int size;

    /* initialize graphics and local variables */
    initgraph(&gdriver, &gmode, "");

    /* read result of initialization */
    errorcode = graphresult();
    if (errorcode != grOk) /* an error occurred */
    {
    printf("Graphics error: %s\n", grapherrormsg(errorcode));
    printf("Press any key to halt:");
    getch();
    exit(1); /* terminate with an error code */
    }

    maxx = getmaxx();
    x = 0;
    y = getmaxy() / 2;

    /* draw the image to be grabbed */
    draw_arrow(x, y);

    /* calculate the size of the image */
    size = imagesize(x, y-ARROW_SIZE, x+(4*ARROW_SIZE), y+ARROW_SIZE);

    /* allocate memory to hold the image */
    arrow = malloc(size);

    /* grab the image */
    getimage(x, y-ARROW_SIZE, x+(4*ARROW_SIZE), y+ARROW_SIZE, arrow);

    /* repeat until a key is pressed */
    while (!kbhit())
    {
    /* erase old image */
    putimage(x, y-ARROW_SIZE, arrow, XOR_PUT);

    x += ARROW_SIZE;
    if (x >= maxx)
    x = 0;

    /* plot new image */
    putimage(x, y-ARROW_SIZE, arrow, XOR_PUT);
    }

    /* clean up */
    free(arrow);
    closegraph();
    return 0;
    }

    void draw_arrow(int x, int y)
    {
    /* draw an arrow on the screen */
    moveto(x, y);
    linerel(4*ARROW_SIZE, 0);
    linerel(-2*ARROW_SIZE, -1*ARROW_SIZE);
    linerel(0, 2*ARROW_SIZE);
    linerel(2*ARROW_SIZE, -1*ARROW_SIZE);
    }

    函数名: putpixel
    功 能: 在指定位置画一像素
    用 法: void far putpixel (int x, int y, int pixelcolor);
    程序例:

    #i nclude
    #i nclude
    #i nclude
    #i nclude
    #i nclude

    #define PIXEL_COUNT 1000
    #define DELAY_TIME 100 /* in milliseconds */

    int main(void)
    {
    /* request autodetection */
    int gdriver = DETECT, gmode, errorcode;
    int i, x, y, color, maxx, maxy, maxcolor, seed;

    /* initialize graphics and local variables */
    initgraph(&gdriver, &gmode, "");

    /* read result of initialization */
    errorcode = graphresult();
    if (errorcode != grOk) /* an error occurred */
    {
    printf("Graphics error: %s\n", grapherrormsg(errorcode));
    printf("Press any key to halt:");
    getch();
    exit(1); /* terminate with an error code */
    }

    maxx = getmaxx() + 1;
    maxy = getmaxy() + 1;
    maxcolor = getmaxcolor() + 1;

    while (!kbhit())
    {
    /* seed the random number generator */
    seed = random(32767);
    srand(seed);
    for (i=0; i
    {
    x = random(maxx);
    y = random(maxy);
    color = random(maxcolor);
    putpixel(x, y, color);
    }

    delay(DELAY_TIME);
    srand(seed);
    for (i=0; i
    {
    x = random(maxx);
    y = random(maxy);
    color = random(maxcolor);
    if (color == getpixel(x, y))
    putpixel(x, y, 0);
    }
    }

    /* clean up */
    getch();
    closegraph();
    return 0;
    }

    函数名: puts
    功 能: 送一字符串到流中
    用 法: int puts(char *string);
    程序例:

    #i nclude
    int main(void)
    {
    char string[] = "This is an example output string\n";

    puts(string);
    return 0;
    }

    函数名: puttext
    功 能: 将文本从存储区拷贝到屏幕
    用 法: int puttext(int left, int top, int right, int bottom, void *source);
    程序例:

    #i nclude
    int main(void)
    {
    char buffer[512];

    /* put some text to the console */
    clrscr();
    gotoxy(20, 12);
    cprintf("This is a test. Press any key to continue ...");
    getch();

    /* grab screen contents */
    gettext(20, 12, 36, 21,buffer);
    clrscr();

    /* put selected characters back to the screen */
    gotoxy(20, 12);
    puttext(20, 12, 36, 21, buffer);
    getch();

    return 0;
    }

    函数名: putw
    功 能: 把一字符或字送到流中
    用 法: int putw(int w, FILE *stream);
    程序例:

    #i nclude
    #i nclude

    #define FNAME "test.$$$"

    int main(void)
    {
    FILE *fp;
    int word;

    /* place the word in a file */
    fp = fopen(FNAME, "wb");
    if (fp == NULL)
    {
    printf("Error opening file %s\n", FNAME);
    exit(1);
    }

    word = 94;
    putw(word,fp);
    if (ferror(fp))
    printf("Error writing to file\n");
    else
    printf("Successful write\n");
    fclose(fp);

  • 相关阅读:
    Clam and fish
    费马小定理求逆元模板题
    1
    DP 习题
    106. 从中序与后序遍历序列构造二叉树
    计算几何(判断四边形形状)
    中国剩余定理
    BFS模板
    DFS模板
    线段树
  • 原文地址:https://www.cnblogs.com/jimeper/p/304958.html
Copyright © 2011-2022 走看看