C语言学习笔记(浙大翁恺版)第十周 字符串函数(2)

本文详细介绍了C语言中的字符串处理函数,包括putchar、getchar、strlen、strcmp、strcpy、strcat、strchr和strstr的使用方法及其实现原理,并探讨了它们的安全性问题。同时,给出了自定义函数来替代部分标准库函数的示例。
摘要由CSDN通过智能技术生成

目录

10.2.1 单字符的输入输出

putchar

getchar

string.h

strlen

strlen代替函数

strcmp

strcmp代替函数

strcpy

strcpy代替函数

strcat

安全版本

strchr

strstr


10.2.1 单字符的输入输出

putchar

int putchar(int c); 输出的不是char类型而是int类型,但是不能接收4字符

向标准输出写一个字符(在标准输出里输出一个字符)

返回写了几个字符,EOF(-1)表示写失败,返回1为正常

getchar

int getchar(void);

从标准输入读入一个字符

返回其读到的字符。返回类型也是int,这是为了返回EOF(-1),来表示输入结束。我们来解释一下

#include<stdio.h>
int main(int argc,char const *argv[])
{
    int ch;
    
    while((ch = getchar()) != EOF)
    {
        putchar(ch);
    }

    printf("EOF\n");
    return 0;
}

 (Mac上是CtrlD,而Windows是CtrlZ)

而既然getchar只读一个字符,我们输入一个字符之后它并没有自动终止读入,而是在用户按下回车之后才终止。

原因如图: 

在我们的程序和我们输入与屏幕之间有shell代为处理数据,用户输入之后,shell会将输入的内容填入缓冲区,然后进行行编辑处理。shell把缓冲区里的东西输进程序。

输入的数据会在不同程序下对其进行不同的处理。其中的CtrlC会让shell直接关闭程序,而CtrlD在shell收到后,在末尾填一个-1,程序读到-1,程序就正常结束了。遇到\0,则等待用户继续输入,因此程序并不会停止读入。

string.h

strlen

size_t strlen (const char *s):可以返回s的字符串长度(不算结尾的0,sizeof会计算0)。

里边的const表示这不会对字符串进行任何更改。

#include<stdio.h>
#include<string.h>

int main(int argv,char const *argv[])
{
    char a[] = "Hello";
    printf("strlen = %lu\n",strlen(s));
    printf("sizeof = %lu\n",sizeof(s));
    
    return 0;
}

 这个函数是怎么实现的?我们来写一个替代函数试一下!

strlen代替函数

#include<stdio.h>
#include<string.h>


//遍历数组,当数组元素为0时表示结束,用下标代替元素个数,得到字符串长度
size_t mylen(const char* s)
{
    int index = 0;
    while(s[index] != '\0')
    {    
        index++;
    }
    return index;
}

int main(int argv,char const *argv[])
{
    char a[] = "Hello";
    printf("strlen = %lu\n",mylen(a));
    printf("sizeof = %lu\n",sizeof(a));
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值