C 和 C++ 不能够自动地做边界检查,边界检查的代价是效率。一般来讲,C 在大多数情况下注重效率。然而,获得效率的代价是,C 程序员必须十分警觉以避免缓冲区溢出问题。C语言标准库中的许多字符串处理和IO流读取函数是导致缓冲区溢出的罪魁祸首。我们有必要了解这些函数,在编程中多加小心。一、字符串处理函数strcpy() strcpy() 函数将源字符串复制到缓冲区。
指针是 C 的精华,如果未能很好地掌握指针,那 C 也基本等于没学。先附上两句话:第一句话:指针就是存放地址的变量。(就是这么简单。)第二句话:指针是指针,数组是数组。(只是它们经常穿着相似的衣服来逗你玩罢了。)轻松一下:(见识一下数组和指针的把戏)1、引用一维数组某个值的方式:(先定义指针p=a) a[2] *(a+2) (&
本系列主要讲的是 C 语言的一些深入的知识,故在开始之前大家可以先完成这个小测试,如果你对下面的题目感觉毫无压力,那么你对于 C 语言基础的掌握已经比较牢固了。下面代码的输出是什么?#include <stdio.h> int main(void) { int a[3][2] = { (0,1), (2,3), (4,5) } ; int *p ; p = a[0] ;
C 是一门简洁且功能强大的编程语言,几乎每一个理工科的学生在大学都接触过C 语言。 本文不会尝试涵盖 C 的全部知识和每个特性,只会介绍一些那些不常见的边角知识和一些高阶特性。希望认真读过本系列的朋友能够有所收获,期待您的反馈!适用人群学过 C 语言的、想继续深入的朋友。学习前提在学习本教程之前,你需要对 c语言基础 知识有一定了解。
当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。以这个表达式为例:a.*b,它将会匹配最长的以 a 开始,以 b 结束的字符串。如果用它来搜索 aabab 的话,它会匹配整个字符串 aabab。这被称为贪婪匹配。有时,我们更需要懒惰匹配,也就是匹配尽可能少的字符。
前面我们提到过怎么查找不是某个字符或不在某个字符类里的字符的方法(反义)。但是如果我们只是想要确保某个字符没有出现,但并不想去匹配它时怎么办?例如,如果我们想查找这样的单词--它里面出现了字母q,但是q后面跟的不是字母u,我们可以尝试这样:\b\w*q[^u]\w*\b匹配包含后面不是字母 u 的字母 q 的单词。