当前位置: 首页 > news >正文

针对考研的C语言学习(定制化快速掌握重点2)

1.C语言中字符与字符串的比较方法

在C语言中,单字符可以用==进行比较也可以用 > , < ,但是字符串却不能用直接比较,需要用strcmp函数。

strcmp 函数的原型定义在 <string.h> 头文件中,其定义如下:

int strcmp(const char *s1, const char *s2);

strcmp 函数的返回值如下:

  • 如果 s1 小于 s2(即 s1 在字典序中排在 s2 之前),返回一个负整数。
  • 如果 s1 等于 s2,返回 0。
  • 如果 s1 大于 s2(即 s1 在字典序中排在 s2 之后),返回一个正整数。
#include <stdio.h>
#include <string.h>

int main() 
{
    const char *str1 = "hello";
    const char *str2 = "world";
    const char *str3 = "hello";

    printf("Comparing '%s' and '%s': %d\n", str1, str2, strcmp(str1, str2)); // 输出负整数
    printf("Comparing '%s' and '%s': %d\n", str1, str3, strcmp(str1, str3)); // 输出 0
    return 0;
}
在这个示例中,strcmp(str1, str2) 会返回一个负整数,因为 "hello" 在字典序中排在 "world" 之前;而 strcmp(str1, str3) 会返回 0,因为两个字符串是相同的。

单字符可以直接比较

对于字符数组进行赋值,只能用strcpy函数进行赋值或者在初始化时赋值

但是对于字符指针可以直接赋值

2.字符数组的一些坑点

先抛出问题

为啥ch数组打印出来是乱码,而ch2打印却好好地。

原因:

printf通过%s 打印字符串时,原理是依次输出每个字符,当读到结束符'\0'时,结束打印;

因为 %s 期望字符串以 \0 结束,所以pirintf输出时,ch找不到结束标志符号,就会内存越界,导致乱码。

因此对于字符串初始化尽量用下面的方式也是最常用的方式,他会自动补'\0';

char str[] = "word";
//或者以下
char str[长度]={0};
strcpy(str,"字符串");

fgets使用方法(更安全)

fgets(char* _Buffer,int _MaxCount,FILE* _Stream);

他会自动截止并且补充结束标志符,第二个参数既是最大长度,但实际存储只能是最大长度-1,因为要留一个给结束标志符。

3.缓冲区的坑

scanf与缓冲区的结合导致的坑!!!

上面图片中为啥是这样呢???

若是scanf读取数据时,分开读取时而读取字符的前面刚好有读取非字符数据时,会在缓冲区残留'\n'-----回车键

因此会把缓冲区的'\n'赋值给下面的字符类型数据,导致数据错误.所以需要再他俩之间进行主动清空缓冲区

同理:fgets使用也会遇到缓冲区的坑!!!

#include<stdio.h>
#include<stdlib.h>

int main()
{
	int n = 0;
	scanf("%d", &n);
	//因为接下来要存入的字符串,故要清楚此时缓冲区残留的'\n'
	getchar();
	char* p = (char*)malloc(n);
	fgets(p, n, stdin);
	printf("%s\n", p);
	free(p);
	return 0;
}

4.结构体内存对齐

【注】这里说的最大成员的大小是指的是成员变量的 类型大小 所比的大小

对于考研指导上面的结论即可。但若是想深入了解可以继续看下面解释

http://www.dtcms.com/a/13186.html

相关文章:

  • Zabbix 7.0 图表中文乱码问题处理步骤
  • u2net网络模型训练自己数据集
  • 【Linux】包管理器、vim详解及简单配置
  • 9月27日,每日信息差
  • MATLAB案例 | 沪深股市收益率的二元Copula模型
  • sql中的regexp与like区别
  • 三位数排序
  • PDF对话RAG应用开发实战
  • grafana加载缓慢解决方案
  • MySQL数据库备份详解
  • 内存泄漏和内存溢出简述
  • 9、论文阅读:无监督的感知驱动深水下图像增强
  • Modbus协议和PLC协议的区别和联系
  • 丹摩智算平台部署 Llama 3.1:实践与体验
  • R语言Shiny包新手教程
  • 11-pg内核之锁管理器(六)死锁检测
  • 【解决方案】git错误:对象文件为空 error: object file
  • vincent,一个超酷的Python库
  • 详解Linux文件系统
  • 前端大模型入门:使用Transformers.js手搓纯网页版RAG(二)- qwen1.5-0.5B - 纯前端不调接口
  • git 基本原理
  • 软件设计——随手笔记
  • Pencils Protocol 全面推动市场,生态通证 DAPP 将持续通缩
  • 十进制与ip地址转换公式(EXCEL公式)
  • 【系统架构设计师】专题:系统分析和设计
  • Unity 与虚幻引擎对比:两大游戏开发引擎的优劣分析
  • LLM - 使用 XTuner 指令微调 多模态大语言模型(InternVL2) 教程
  • ​IAR全面支持国科环宇AS32X系列RISC-V车规MCU
  • 小灰的基金,终于回血了!
  • 百度智能体创建:情感领域的创新力量