C语言_0315笔记_字符串函数:putchar输出putchar(ch)/getchar获取ch = getchar()/strlen输出字符串长度 不读‘\0’

10.2.1 单字符的输入输出

putchar

//放字符 放到标准输出里面“那个黑黑的窗口里面”

  • int putchar(int c);

  • 输出的不是char类型而是int类型,但是不能接收4字符

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

  • 返回类型也是int,返回写了几个字符,EOF(-1)表示写失败,返回1为正常(正常情况下不需要去检查putchar的返回)

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;
}
  • 输入Crtl+C时,没有输出CtrlC,也没有输出EOF,说明是强制退出

  • 输入Ctrl+D( (Mac上是CtrlD,而Windows是Ctr lZ)时入输出EOF,说明此时输入结束

什么时候为止?回车

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

shell的工作原理

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

  • 输入的数据会在不同程序下对其进行不同的处理。

  • CtrlC会让shell直接关闭程序

  • CtrlD在shell收到后,在末尾填一个-1,程序读到-1,程序就正常结束了。

  • 遇到\0,则等待用户继续输入,因此程序并不会停止读入。

10.2.2 strlen函数

标准库string.h

使用字符串函数的时候,需要加上头文件

#include<string.h>

strlen

//告诉你字符串的长度

  • size_t strlen (const char *s) //用const保护字符串

  • 可以返回s的字符串长度(不算结尾的0,sizeof会计算0)。

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

例子:

#include<stdio.h>//输入输出头文件
#include<string.h>//要使用字符串函数 加的头文件
 
int main(int argc,char const *argv[])//main的标准定义
{
    char a[] = "Hello";
    printf("strlen = %lu\n",strlen(a));//5
    printf("sizeof = %lu\n",sizeof(a));//6  还读到了反斜杠0(结尾)
    
    return 0;
}

自己写 代替它的功能?

#include<stdio.h>
#include<string.h>
 
//遍历数组,当数组元素为0时表示结束,用下标代替元素个数,得到字符串长度
size_t mylen(const char* s)//size_t啥意思 int可以理解
{
    int index = 0;
    while(s[index] != '\0')
    {    
        index++;
    }
    return index;
}

size_t

  • size_t中的t是type(类型)的意思。

  • size_t的意思是size of type,即某种类型的大小(字节数)。

  • size_t是C内部预定义的一个类型:typedef unsigned int size_t

  • 因此这句代码相当于:unsigned int size=sizeof(long long);

  • sizeof()函数的功能就是求变量在内存中所占的字节数。

  • 因此,这句话的意思是将long long类型在内存中所占的字节数赋值给无符号整型变量size。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
所有的 C / C++ 函数 Constructors (cppstring) Constructors (cppvector) Operators (cppbitset) Operators (cppdeque) Operators (cppstack) Operators (cppstring) Operators (cppvector) abort (stdother) abs (stdmath) acos (stdmath) any (cppbitset) append (cppstring) asctime (stddate) asin (stdmath) assert (stdother) assign (cppdeque) assign (cpplist) assign (cppstring) assign (cppvector) at (cppdeque) at (cppstring) at (cppvector) atan (stdmath) atan2 (stdmath) atexit (stdother) atof (stdstring) atoi (stdstring) atol (stdstring) back (cppdeque) back (cpplist) back (cppqueue) back (cppvector) bad (cppio) begin (cppdeque) begin (cpplist) begin (cppmap) begin (cppmultimap) begin (cppmultiset) begin (cppset) begin (cppstring) begin (cppvector) bsearch (stdother) c_str (cppstring) calloc (stdmem) capacity (cppstring) capacity (cppvector) ceil (stdmath) clear (cppdeque) clear (cppio) clear (cpplist) clear (cppmap) clear (cppmultimap) clear (cppmultiset) clear (cppset) clear (cppvector) clearerr (stdio) clock (stddate) compare (cppstring) copy (cppstring) cos (stdmath) cosh (stdmath) count (cppbitset) count (cppmap) count (cppmultimap) count (cppmultiset) count (cppset) ctime (stddate) data (cppstring) #define (preproc) difftime (stddate) div (stdmath) empty (cppdeque) empty (cpplist) empty (cppmap) empty (cppmultimap) empty (cppmultiset) empty (cpppriorityqueue) empty (cppqueue) empty (cppset) empty (cppstack) empty (cppstring) empty (cppvector) end (cppdeque) end (cpplist) end (cppmap) end (cppmultimap) end (cppmultiset) end (cppset) end (cppstring) end (cppvector) eof (cppio) equal_range (cppmap) equal_range (cppmultimap) equal_range (cppmultiset) equal_range (cppset) erase (cppdeque) erase (cpplist) erase (cppmap) erase (cppmultimap) erase (cppmultiset) erase (cppset) erase (cppstring) erase (cppvector) #error (preproc) exit (stdother) exp (stdmath) fabs (stdmath) fail (cppio)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值