杂记 - C基础0

  • 按文件大小读取文件

不清楚文件的大小时,先读取文件大小(所占的字节数,不是字符长度),再动态分配空间给字符串,以已知的大小读取文件所有内容:如何用C语言获取文件的大小_百度知道 (baidu.com)

  • fopen与open的区别

fopen、fread、fwrite属于缓冲文件系统,是库函数,缓冲区的大小影响速度,推荐使用。返回FILE指针

open、read、write属于非缓冲文件系统,是系统调用,只能以二进制形式读写,速度快。返回Int型的文件描述符,对于一些设备文件只能使用这个,所以在实现复制功能时使用的是这个,因为用户可能复制一个设备文件。

fopen可以指定"rb"以二进制读写,而read这只有“O_RDONLY”,因为它只能以二进制读写。

参考:C语言:fopen与open的总结_岁月求索-CSDN博客

  • 分割字符串

分割字符串c语言strsep,C语言 字符串切割_椒盐皮皮鲲的博客-CSDN博客  

  • 复制字符串

两个字符串得有确定 的大小,如果只声明了一个指针,是不能复制成功的。所以一般的可以写成:

char src[]="abchdj";

char dest[sizeof(src)];

strcpy(dest,src);
  • 连接字符串

接收连接的字符数组一定要够大,直到能容纳两人原本的长度之和,所以可能涉及动态分配

strcat(dest,src);
  • strlen与sizeof

strlen计算字符串的字符个数,不包括'\0'。

sizeof返回的是占内存的大小,具体看数组类型以及声明时的数组大小(不是赋值的长度大小),如果是数组指针,就是4。

参考:C语言字符串的长度与大小_all8023的专栏-CSDN博客_字符串的长度

  • 字符数组与指针

C语言:字符串与指针_thebestleo的专栏-CSDN博客

动态分配内存,当想分配另一个字符数组的大小*2时,不要使用sizeof(str)*2,而是使用strlen(str)*2,因为sizeof获得的是编译时候确定的内存,那时候还没有读文件,所以sizeof其实不对。参考:

malloc与sizeof的合用的陷阱_473687880-CSDN博客

  • C语言连接pgsql数据库

libpq:针对pgsql数据库,速度较快,但以后要是想换数据库管理系统就不好办了。

odbc:兼容多种数据库,被普遍接受,文档丰富,推荐使用,而且这个不止针对C,而是很多语言都可以。

  • main函数

C99定义了main函数的两种标准:

int main(void)

int main(int argc, char *argv[])

虽然void main()也能编译通过正常运行,但是不建议。

如果不写return语句,编译器会自动加上return 0

参考:深度剖析C语言的main函数_小生宁的博客-CSDN博客

mian函数并不是c程序或者c++程序的启动代码,启动代码是C Runtime的startup代码中的void mainCRTStartup(void)函数,它调用了用户的main函数,在此之前,它还会获取命令行参数、获取环境变量值、初始化全局变量、初始化io的所需各项准备等,然后调用用户的main函数。main函数返回后,mainCRTStartup还需要调用全局变量的析构函数或者atexit()所登记的一些函数。往深里说,是在链接生成可执行文件时,告诉链接器这个可执行文件的entry就是mainCRTStartup。当然,编程者也可以在链接时的命令行或者在源程序中指定本程序的entry,例如:
#pragma comment( linker, "/subsystem:windows /entry:WinMainCRTStartup" )

不同系统的启动代码是不一样的。

参考:【转载】C与C++程序的启动代码(startup)_AWall的博客-CSDN博客

源代码---编译-->目标代码--链接-->可执行代码。

链接在编译之后,所以当只有部分文件有更改,并不会编译所有文件。

  • 操作系统的位数

由地址总线、数据总线、控制总线的位数决定,表示一次能读取的数据的位数,而处理器不能直接从硬盘读,而是通过内存读,所以32位能支持的内存理论上最大为2^32bit,即4G,而64位操作系统理论上能支持2^64bit,但实际只能支持128G内存。

int所占字节数一般是一个系统字长,比如16位操作系统就是2个字节,32位就是4个字节,但是64位上也是4个字节,因为大家已经熟悉了int占4个字节了。

而指针,在32为系统上占4个字节,在64位系统上占8个字节。

参考:为什么一个指针在32位系统中占4个字节,在64位系统中占8个字节? - 高晓牛 - 博客园 (cnblogs.com)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值