首页 > 其他分享 >《C和指针》第一章

《C和指针》第一章

时间:2023-04-24 17:44:56浏览次数:31  
标签:EOF int 第一章 char dest input 指针

1 第一章

C标准库中几个常用的IO函数

int puts(void *str):

从str中提取字符直到遇到第一个'\0'为止,将这些字符串加上'\n'后发送给stdout。

int main(void)
{
    char input[100];
    input[0] = 'a';
    input[1] = 'b';
    input[2] = 'c';
    input[3] = '\0';
    input[4] = 'd';
    puts(input);    
    return 0;
}

会返回 abc

char* gets(void *str):

从stdin中读取一行,直到遇见换行符为止,gets函数会将换行符'\n'替换为'\0'写入到传入的指针中;

请注意gets函数在将字符写入数组中时并不会检查数组是否越界,如果字符个数大于数组长度,这可能会带来一些不可预料的后果,超出的部分会写入到内存中数组之后的位置,这个位置有可能是下一个指令的地址,有可能是其他局部变量,修改他们会带来麻烦,所以谨慎使用。

c11中废弃了gets函数,可以用更安全的fgets来实现同样的功能。


int scanf(const char *restrict, ...):

scanf用法类似于printf,不同的是出第一个参数之外,其它参数表示从stdin写入的地址,应当是一个指针类型。
scanf("%d",&num[1]),他会跳过前面的空格,直到遇到第一个空格表示结束,将结果存处在对应的地址上 。


char* strncpy(char *dest,char *src,int n):

从源指针src复制n个元素到dest中 。


char*strcpy(char *dest,char *src):

将源指针src中的字符包括'\0'复制到dest中,此函数并不会检查dest是否能够容纳得下,因此需要保证dest足够大 。


int getchar(void):

从标准输入stdin中获取一个字符,常规来说返回值应该是char,事实上返回值是int类型是为了保证读取到的EOF结束符也能正常返回,EOF在stdio.h被定义,值为-1。

#ifndef EOF
# define EOF (-1)
#endif

这里应当注意不同的平台char类型所表示的范围不同,ARM体系,char是不带符号的,取值范围0到255。而一些其他的平台char的范围就可能是-128到127。因此考虑兼容性,就不能把EOF赋值给一个char类型,这可能会导致错误,我觉得getchar应该是考虑到这个原因才这样设计的。

标签:EOF,int,第一章,char,dest,input,指针
From: https://www.cnblogs.com/ljq245055804/p/17350302.html

相关文章

  • 快慢指针判断链表中是否存在循环
    给链表设置快慢两个指针,每次移动时,快指针的速度是慢指针的一倍。即每次快指针移动两次,慢指针移动一次。如果存在循环,快指针跑两圈就可以追上慢指针。 为什么不让慢指针停在原地等呢?因为循环有可能出现在中间位置。如此一来,循环过的位置就不必从头再循环。 整个过程的所有......
  • 指针数组和数组指针
    优先级()>[]>*强调的放后面int*p[10] int*p[10]表示指针数组,强调数组概念,是一个数组变量,数组大小为10,数组内每个元素都是指向int类型的指针变量int(*p)[10]int(*p)[10]表示数组指针,强调是指针,只有一个变量,是指针类型,不过指向的是一个int类型的数组,这个数组大......
  • java调用GDAL,接口运行一次出现A fatal error has been detected by the Java Runtime
    参考文章:https://www.jianshu.com/p/4bffe29e3a02问题描述:通过调用GDAL写的SpringBoot接口,第一次访问成功,第二次报错,显示报错的位置为gdal库。尝试了很多方法https://www.cnblogs.com/jokingremarks/p/15132599.html#!comments仍然不成功,感觉应该是第二次运行接口时,进行垃圾回......
  • 【C++入门】类和对象(一) 详解(class、struct、类的定义、类的实例化、类的封装、对象
    1.面向过程和面向对象初步认识面向过程更加关注解决问题的过程和步骤。而面向对象关注的是对象,对一个事情拆分成不同的对象,靠对象之间的交互实现。例如:外卖系统面向过程:上架→点餐→派单→送餐注重过程步骤面向对象:(更加贴近现实之间的业务逻辑交互)骑手→商家←用户注重对象和对象......
  • C语言指针运算
    给一个指针加1表示要让指针指向下一个变量,也就是在地址值上加一个sizeof(指针所指的类型),例如:inta[10];int*p=a;*(p+1)=a[1];*(p+n)=====ac[n] 同理:这些指针运算可以对指针做:1.给指针加减一个整数(减就是往前移一位)2.递增递减(++/--)3.两个指针相减(其实就是两个指针的差......
  • 1 第一章 基本句型及补语
    语法第一章基本句型及补语1)S+V+C“要了解补语,只需要研究那些解释为“是”的动词(连缀动词)”“一个完整的句子,必须能够表达完整的意思。这需要以两个部分来完成:主语和动词。主语,是这个句子所叙述的对象。动词,构成叙述的主要内容。”“在所有的英语动词中,只有解释为“是”的......
  • c语言刷——滑动窗口&&双指针 leetcode合集
    目录字符串问题3.无重复字符的最长子串76.最小覆盖子串424.替换后的最长重复字符438.找到字符串中所有字母异位词1208.尽可能使字符串相等连续1的问题485.最大连续1的个数487.最大连续1的个数II(p)1004.最大连续1的个数III综合题239.滑动窗口最大值字符串问题3.无重......
  • 《操作系统原型--xv6分析与实验》第一章:qemu启动xv6问题记录
    最近在学习《操作系统原型--xv6分析与实验》,第一章安装qemu和启动xv6就遇到很多障碍,特此记录一下解决办法。版本信息系统:Ubuntu22.04.1LTSxv6:rev9qemu:6.2gcc:11.2.0操作步骤ubuntu勾选了完整安装,默认自带gcc、make等构建工具。首先将用到的xv6下载下来解压,我下载的是re......
  • c 数组名和指针的区别
    关于c中数组名和指针的区别我写了一下程序进行测试并就自己的理解做了详细的解释,供自己以后复习,大佬批评指正和需要的网友参考学习。环境:gcc(mingw或cygwin)代码:1#include<stdlib.h>2intmain(intargc,charconst*argv[])3{4intarr[10]={23456,3,4,5,6,......
  • 双指针总结
    双指针总结快慢指针类似于龟兔赛跑,两个链表上的指针从同一节点出发,其中一个指针前进速度是另一个指针的两倍。利用快慢指针可以用来解决某些算法问题,比如计算链表的中点:快慢指针从头节点出发,每轮迭代中,快指针向前移动两个节点,慢指针向前移动一个节点,最终当快指针到达终点的时......