数组名以及fget函数()模仿用法

一:

数组名即数组第一个元素的地址。

#include <stdio.h>
//int main()
//{
//    int a;
//    int *p = &a;  //&a表示把a的地址的数值赋予给p 
//    printf("请输入一个整数:");
//    scanf("%d",&a);  // 取来存放的地址,将数值放进去 
//    printf("a= %d\n",a);
//    
//    printf("请重新输一个整数:");
//    scanf("%d",p);  //&p是指针本身的地址 ,p本身就是a的地址 
//    printf("a= %d\n",a);
//    
//    return 0;
// } 

int main()
{
    char a[] = "pangou";
    // 数组名就是数组第一个元素的地址 
    char *p = a;  // a是一个指向 &a[0]的指针,即数组a的第一个元素的地址 
    
    printf("*p = %c,*(p+1) = %c,*(p+2) = %c\n",*a,*(a+1),*(a+2));
    printf("*p = %c,*(p+1) = %c,*(p+2) = %c\n",*p,*(p+1),*(p+2));
    return 0;
    
}

二:

fgets 函数用于从指定文件中读取字符串。

fgets 函数最多可以读取 size - 1 个字符,因为结尾处会自动添加一个字符串结束符 '\0'。当读取到换行符('\n')或文件结束符(EOF)时,表示结束读取('\n' 会被作为一个合法的字符读取)。

注意:计算长度的时候,\n也会被计入进去。

char *fgets(char *s, int size, FILE *stream);

参数含义
s字符型指针,指向用于存放读取字符串的位置
size指定读取的字符数(包括最后自动添加的 '\0')
stream该参数是一个 FILE 对象的指针,指定一个待操作的数据流

fget() 函数中的 size 如果小于字符串的长度,那么字符串将会被截取;如果 size 大于字符串的长度则多余的部分系统会自动用 ‘\0’ 填充。所以假如你定义的字符数组长度为 n,那么 fgets() 中的 size 就指定为 n–1,留一个给 ‘\0’ 就行了。
但是需要注意的是,如果输入的字符串长度没有超过 n–1,那么系统会将最后输入的换行符 ‘\n’ 保存进来,保存的位置是紧跟输入的字符,然后剩余的空间都用 ‘\0’ 填充。所以此时输出该字符串时 printf 中就不需要加换行符 ‘\n’ 了,因为字符串中已经有了。

#include <stdio.h>

#define MAX 1024

int main()
{
        char str[MAX];
        char *target = str;
        int length = 0;

        printf("请输入一个字符串:");
        fgets(str, MAX, stdin);

        while (*target++ != '\0')
        {
                length++;
        }

        printf("您总共输入了 %d 个字符!\n", length - 1);

        return 0;
}

int main()
{
    char str[MAX];
    char *target = str;
    char ch;
    int length = 0;
    
    printf("请输入一个字符串");
    fgets(str,MAX,stdin);
    
    while(1)
    {    
        ch = *target++; 
        if (ch == '\0')
        {
            break;
         } 
        if ((int)ch < 0)
        {
            target +=1;
        }
        length++;
    }
     printf("%d\n",length-1);
     return 0;
     
}

// 以下代码证明每个中文字符在我电脑系统占3个字节的存储空间; 
/*int main()
{
    char str[] = "中";
    int length,i;
    length = sizeof(str); //sizeof(str[0])
    printf("lengt of str:%d\n",length);
    for (i = 0; i < length; i++)
    {
        printf("str[%d]=%d\n",i,str[i]);
    }
    return 0;
}
*/

三:

int main()
{
    char str1[MAX];
    char str2[MAX];
    
    char *target1 = str1;
    char *target2 = str2;
    
    char ch ;
    int n ;
    printf("请输入一个字符串到 str1中:");
    fgets(str1,MAX,stdin);
    
    printf("请输入需要拷贝的字符个数:");
    scanf("%d",&n);
    
    printf("开始拷贝str1 的内容到 str2 中...\n");
    
    while (n--)
    {
        
        ch = *target2++ = *target1++;
        if (ch == '\0')
        {
             break;
        }
        if ((int)ch < 0)
        {
            *target2++ = *target1++;
            
        }
    }
    *target2 = '\0'; //字符串一般以\0结尾 
    printf("拷贝完毕");
    printf("现在 ,str2中的内容是:%s\n",str2);
    return 0; 
    
}

四:

while (n-- && (*target2++ = *target1++) != '\0')

实现 strncpy 函数的功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值