转义字符与strlen(),sizeof()在一起的注意事项

本文围绕C语言中转义字符与strlen()、sizeof()展开。介绍转义字符是转变意思的单个字符,用strlen()统计长度和sizeof()计算字节大小时,转义字符计为一个字符,strlen()遇\\0停止计数。还讲解了\\ddd和\\xdd转义字符通过ASCII表找对应字符的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转义字符与strlen(),sizeof()

1. 转义字符每个人都知道是怎么一回事儿,转义字符顾名思义就是转变意思。

2. 首先转义字符肯定是一个字符,不是两个字符,更不用说是数字了,就是字符

3. 当用strlen()统计字符串长度时或者用sizeof()计算所占字节大小时:

   1.转义字符为一个字符,比如说\n,只计为一个字符,两者是一个整体。

   2. 当\不起任何作用时,则单个\不计算在结果内。

   3. 编译器会把\000或者\00当成\0,道理对\x000.....也一样。

   4. 当strlen()碰到\0时就会停下来不在计数!\0不包括在内!,而sizeof()没有影响。

如:

\c没有任何转义的东西,这时候不能记为\与c两个字符,也只能记为一个字符。

\ddd 

1. \ddd 斜杠后面跟1~3位八进制数,那么这个整体代表什么字符呢

2. 首先先把八进制数化成十进制的数,然后对照ACSII码表进行对照就可以找到对应的字符了

3.  如下:

\xdd

1. \x后面跟两位十六进制数,该两位十六进制数为对应字符的十六进制ASCII码值.

2. 道理一样,首先先把十六进制数化成十进制的数,然后对照ACSII码表进行对照就可以找到对应的字符了

总而言之,对于\ddd与\xdd这两个转义字符,都要通过ACSII表去找对应的字符。

*这里有个小小的区别:\ddd 只计算后面3位八进制,而\x会把后面所有的位都计算! 

练习: 

答案:
 

 

 

 

### MySQL 中转义字符的用法 在 MySQL 数据库中,为了防止 SQL 注入攻击并正确解析特殊字符,通常会使用转义字符。以下是关于如何在 MySQL 中使用转义字符的相关信息: #### 基本概念 MySQL 使用反斜杠 `\` 作为默认的转义字符[^1]。通过它可以在字符串中表示一些特殊的字符,这些字符如果未加转义可能会引起语法错误或者安全漏洞。 #### 转义字符列表 下表列出了常用的转义序列及其含义[^3]: | 序列 | 含义 | |------|------| | `\'` | 单引号 | | `\"` | 双引号 | | `\b` | 退格符 | | `\n` | 换行符 | | `\r` | 回车符 | | `\t` | 制表符 | | `\\` | 反斜杠本身 | #### 查询中的应用实例 下面是一些实际查询的例子展示如何使用转义字符: ```sql -- 插入包含单引号的数据 INSERT INTO users (name) VALUES ('John O\'Connor'); -- 查找带有双引号的名字 SELECT * FROM books WHERE title = 'The \"Great\" Escape'; -- 处理回车和换行 UPDATE messages SET content='Line one.\nLine two.' WHERE id=1; ``` #### 编程语言中的处理方式 当从编程环境中向数据库发送含有特殊字符的输入时,应该先对其进行适当转义。不同语言提供了相应的API来进行此操作[^2]: - **C**: 使用 `mysql_real_escape_string()` 函数。 ```c char query[1024]; const char* unescaped_str = "O'Connor"; size_t length; mysql_real_escape_string(conn, escaped_str, unescaped_str, strlen(unescaped_str)); snprintf(query, sizeof(query), "INSERT INTO test_table (name) VALUES('%s')", escaped_str); ``` - **Perl**: 利用DBI模块里的 `quote` 方法自动完成必要的转换工作。 ```perl my $dbh = DBI->connect(...); my $unsafe_value = "Don't try this!"; my $safe_value = $dbh->quote($unsafe_value); $sth = $dbh->prepare(qq{ INSERT INTO table_name (column_name) VALUES ($safe_value)}); ``` 以上就是有关于 MySQL 转义字符的一些基本介绍以及具体实现方法。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

立志成为软件工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值