day_06C语言基础

C语言基础

相关定义
软件=程序+文档
程序=函数+函数+。。。 (函数的集合)
函数=数据结构+算法

数据结构:对数据的定义。

算法:方法,整个步骤。

什么是语句? 在程序中,以 分号 ; 作为结束的代码,表示一条语句。
每个语句,就是一个执行的步骤。

文档:帮助用户使用和对软件的说明。

算法五个特性:
1、有穷性: 每条语句,必须在一定的时间内可以执行完。
2、确定性: 每条语句,执行后的结果唯一。
3、输入:需要初始信息。 可以有一个或多个输入,也可以没有输入。
4、输出:执行的结果,是为人所需的,必须要有输出。
5、健壮性(可行性):可行,每个步骤的结果,和预期的要相同。

C语言起源:
Dr.K.T -> UNIX

汇编 -> 与机器硬件一一对应。移植性(兼容性)很差 换个平台需要重新写

Dr.K.T -> BCPL -> 江湖人称 B语言

DR 和 Dr.K.T -> B语言重写 UNIX -> 新的数据结构和语法 -> C语言

DR 和 Dr.K.T -> C语言重写UNIX

C语言的后代:C++、C#、Java、PHP、Objective-C、Swift、VB …

C语言基础:

运算符:34种

+-*/ % ++ – > < = == >= <= != ! || | & &&(逻辑与) ^ ~(按位取反) << >> () { } [ ] \ . , : ; ? “” ”

关键字:32个

字符:char
整型:int
浮点型:float double
空类型:void

long 声明长整型变量
short 声明短整型变量

auto 声明自动变量,缺省时编译器一般默认为auto
signed 声明有符号类型变量
unsigned 声明无符号类型变量
struct 声明结构体变量
union 声明联合数据类型
enum 声明枚举类型
static 声明静态变量
switch 用于开关语句
case 开关语句分支
default 开关语句中“其他”分支
break 跳出当前循环
register 声明寄存器变量
const 声明只读变量
volatile 说明变量在程序执行中可被隐含地改变
typedef 用以给数据类型区别名
extern 声明变量是在其他文件正声明(也可以看做引用变量)
return 子程序返回语句(可以带参数也可以不带参数)
continue 结束当前循环,开始下一轮循环
do 循环语句的循环体
while 循环语句的循环条件
if 条件语句
else 条件语句否定分支
for 一种循环语句
goto 无条件跳转语句
sizeof 计算对象所占内存空间大小



控制语句:9个

选择:2个  if  switch
循环:3个  for  while  do..while
返回:4个  return break continue goto

函数=数据结构+算法

标识符:函数名,变量名等。
规则:
标识符由字母、数字、下划线组成,不能以数字开头,不能和关键字相同,不能重名。

有些变量经常需要用到,可以将其设置为寄存器变量

外存是非易失性存储器,
内存是易失性存储器,掉电易失性

.swp交换文件

计算机的世界是二进制的,一切非二进制文件数据

存储器只能放二进制数

存储单位:
bit 简写 b ,即比特或位,一个二进制数字(0或1)
Byte 简写 B ,即字节,1B=8b
KB 千字节
MB 兆字节
GB 吉字节
TB 太字节

今日小题:
1、为什么printf不加头文件也能显示?
gcc默认情况下制定到/usr/include文件夹

2、printf的f是什么意思?
f formatted 格式化了的

3、”” 和 <> 的区别
<> 直接从编译器自带的函数库中寻找文件
“” 先从自定义的文件中找,如果找不到再从函数库中寻找文件
如果是自己写的头文件,建议使用”“

今日小结

今天主要讲了C语言的入门知识以及标识(shi)符的命名规则:标识符由字母、数字、下划线组成,不能以数字开头,不能和关键字相同,不能重名。还有各个数据的表示范围,与系统位数有关。也通过相关.c文件进行了证明也再次强调了代码的书写格式

<think>嗯,这个问题看起来挺实用的。用户在尝试用C#删除一个注册表项及其子项,地址是"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\VID_054C&PID_06C1"。从用户提到的站内引用可以看出,用户了解过一些背景知识,但主要问题还是在具体实现上。注册表操作在C#中需要使用Microsoft.Win32命名空间。不过得特别当心,HKEY_LOCAL_MACHINE下的操作涉及权限问题。用户提到的方法可行但有几个要点值得详细说明。权限是关键的第一步。系统注册表操作需要管理员权限。在C#项目中配置应用清单(app.manifest)激活管理员权限是必要的。这点必须强调,否则很多用户会忽略导致运行时权限错误。具体实现上,RegistryKey的DeleteSubKeyTree方法很便捷。但这里有个细节问题:USB设备项通常在Enum\USB下,系统对这些键设置了额外保护。直接删除可能导致权限不足的异常。参考引用[1]和引用[3]提到的安全特性变化,特别是Win7及更高版本系统的变更,这点很关键。考虑加入错误处理机制很重要。使用using确保资源释放是基本习惯。示例代码除了展示完整流程外,应该包含常见异常的捕获和处理。特别是Win32Exception,它能提供更具体的错误原因。用户可能还需要考虑回滚方案。万一删除导致系统不稳定,引用[3]提到的ControlSet备份功能可以作为恢复点。建议用户提前导出注册表备份。虽然不是代码内容,但属于操作规范。最后注意路径构造的细节:双反斜杠在C#字符串中的转义处理。VID_054C&PID_06C1这种硬件ID含有"&"和"_"符号不需要特殊处理,属于常规路径字符。</think> 以下是用C#删除指定注册表项及子项的完整解决方案,参考了引用中的安全限制: ```csharp using Microsoft.Win32; using System; using System.Security; class RegistryRemover { const string TARGET_PATH = @"SYSTEM\CurrentControlSet\Enum\USB\VID_054C&PID_06C1"; public static void DeleteRegistryKey() { try { // 使用HKEY_LOCAL_MACHINE根键(参考引用[2]) using (var hive = Registry.LocalMachine) { DeleteKeyWithSubkeys(hive, TARGET_PATH); Console.WriteLine($"成功删除注册表项: {TARGET_PATH}"); } } catch (SecurityException ex) { Console.WriteLine($"权限不足错误: {ex.Message}\n请以管理员身份运行程序"); } catch (UnauthorizedAccessException ex) { Console.WriteLine($"访问被拒绝: {ex.Message}\n系统保护机制阻止了操作(参考引用[1])"); } catch (Exception ex) { Console.WriteLine($"操作失败: {ex.Message}"); } } private static void DeleteKeyWithSubkeys(RegistryKey root, string path) { // 注意:CurrentControlSet是动态键(参考引用[3]) using (var targetKey = root.OpenSubKey(path, writable: true)) { if (targetKey != null) { // 递归删除子项 foreach (string subkey in targetKey.GetSubKeyNames()) { DeleteKeyWithSubkeys(targetKey, subkey); } root.DeleteSubKeyTree(path); // 删除整个注册表子树 } } } } ``` ### 关键说明: 1. **权限要求**(参考引用[1][2]) - 必须使用**管理员权限**运行程序 - 应用程序清单需包含: ```xml <requestedExecutionLevel level="requireAdministrator"/> ``` 2. **安全限制**(重要) - Windows 7+系统对`HKEY_LOCAL_MACHINE\SYSTEM`有特殊保护(参考引用[1][3]) - 若遇`Access Denied`错误,可能需要先获取所有权: ```csharp var key = Registry.LocalMachine.OpenSubKey(TARGET_PATH, RegistryKeyPermissionCheck.ReadWriteSubTree, RegistryRights.TakeOwnership); ``` 3. **替代方案**: ```powershell # 通过PowerShell绕过部分限制 Remove-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Enum\USB\VID_054C&PID_06C1" -Recurse -Force ``` ### 注意事项: 1. 操作前务必备份注册表 2. 该操作可能导致USB设备异常(参考引用[4]服务参数) 3. `CurrentControlSet`是动态链接(参考引用[3]),实际修改会映射到`ControlSet001` > **建议操作流程**: > 1. 导出备份:`reg export HKLM\SYSTEM\CurrentControlSet\Enum\USB backup.reg` > 2. 尝试通过设备管理器卸载设备驱动 > 3. 执行删除程序(管理员身份) > 4. 重启系统使更改生效
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值