字符串函数(String processing function)也叫字符串处理函数,指的是编程语言中用来进行字符串处理的函数。本文主要介绍 C语言中符串处理函数 gets()和fgets()的区别使用方法,以及相关的示例代码。

1、gets()

gets()是从标准输入读入字符,并保存到 s 指定的内存空间,直到出现换行符或读到文件结尾为止。代码如下,

#include <stdio.h>
/* 
char *gets(char *s);
参数 
s:字符串首地址
返回值
成功:读入的字符串
失败:NULL

*/
int main()
{
   char str[1000];

   printf("请输入一个字符串:");
   gets(str);

   printf("输入的字符串是:%s", str);

   return(0);
}

gets(str)与 scanf("%s",str)的区别:

gets(str)允许输入的字符串含有空格,canf(“%s”,str)不允许含有空格。

2、fgets()

fgets()是从 stream 指定的文件内读入字符,保存到 s 所指定的内存空间,

直到出现换行字符、 读到文件结尾或是已读了 size - 1 个字符为止,

最后会自动加上字符 ‘\0’ 作为字符串结束。代码如下,

#include <stdio.h>
#include <string.h>
/*
char *fgets(char *s, int size, FILE *stream); 
参数
s:字符串
size:指定最大读取字符串的长度(size - 1)
stream:文件指针,如果读键盘输入的字符串,固定写为 stdin
返回值
成功:成功读取的字符串读到文件尾
出错:NULL。
*/
int main()
{
    int count = 10;
    char str[10];
    FILE *fp;
    
    fp = fopen("file.txt","w+");
    fputs("www.cjavapy.com\n", fp);
    fputs("Filename file.txt\n", fp);
    
    rewind(fp);
    
    while(feof(fp) == 0)
    {
        fgets(str,count,fp);
        printf(str);
    }
    
    
    fclose(fp);
    return 0;
}

3、gets()和fgets()区别

gets从标准输入读取,fgets从指定的流读取。fgets必须指定缓冲区的长度 size,此函数一直读到下一个换行符为止,但是不超过 size - 1 个字符,读入的字符被送入缓冲区,该缓冲区以null字节结尾。如若该行包含最后一个换行符的字符数超过size - 1,则fgets只返回一个不完整的行,但是缓冲区总是以null字节结尾,对fgets的下一个调用继续读该行。代码如下,

#include <stdio.h>
#include <string.h>
 
#define NUM 8
 
int main(void)
{
    char str1[NUM] = {'C', 'J', 'A', 'V', 'A','P','Y'}; 
    char str2[NUM] = {'C', 'J', 'A', 'V', 'A','P','Y'};  //使用特定字符填充缓冲区
 
    fgets(str1, NUM, stdin);
    printf("len = %d str1 = %s\n", (int)strlen(str1) ,str1);
    for(int i=0; i<NUM; i++)
    {
        if(str1[i] == '\0')            
            printf("str1[%d]    %d    %s\n", i, (int)str1[i],  "null");        //null字节
        else if(str1[i] == '\n')
            printf("str1[%d]    %d    %s\n", i, (int)str1[i],  "\\n");        //换行符
        else
            printf("str1[%d]    %d    %c\n", i, (int)str1[i],  str1[i]);
    }
    gets(str2);
    printf("len1 = %d str2 = %s\n", (int)strlen(str2) ,str2);
 
    if((int)strlen(str2) + 1 > NUM)        //加 1 的目的是把 null字节输出出来
    {
        for(int i=0; i<(int)strlen(str2) + 1; i++)    //加 1 的目的是把 null字节输出出来
        {
 
            if(str2[i] == '\0')            
                printf("str2[%d]    %d    %s\n", i, (int)str2[i],  "null");        //null字节
            else if(str2[i] == '\n')
                printf("str2[%d]    %d    %s\n", i, (int)str2[i],  "\\n");        //换行符
            else
                printf("str2[%d]    %d    %c\n", i, (int)str2[i],  str2[i]);
            
        }
    }
    else    //输入字节数小于 5
    {
        for(int i=0; i<NUM; i++)
        {
 
            if(str2[i] == '\0')            
                printf("str2[%d]    %d    %s\n", i, (int)str2[i],  "null");        //null字节
            else if(str2[i] == '\n')
                printf("str2[%d]    %d    %s\n", i, (int)str2[i],  "\\n");        //换行符
            else
                printf("str2[%d]    %d    %c\n", i, (int)str2[i],  str2[i]);
            
        }
    }

    return 0;
}

推荐文档