c指针易错点


  • 指针变量可以进行加减运算,例如p++、p+i、p-=i。指针变量的加减运算并不是简单的加上或减去一个整数,而是跟指针指向的数据类型有关。  
  • 给指针变量赋值时,要将一份数据的地址赋给它,不能直接赋给一个整数,例如int *p = 1000;是没有意义的,使用过程中一般会导致程序崩溃。

  • 使用指针变量之前一定要初始化,否则就不能确定指针指向哪里,如果它指向的内存没有使用权限,程序就崩溃了。对于暂时没有指向的指针,建议赋值NULL。

  • 两个指针变量可以相减。如果两个指针变量指向同一个数组中的某个元素,那么相减的结果就是两个指针之间的元素个数。

  • 数组也是有类型的,数组名的本意是表示一组类型...

Read more

c在母字符串中查找子字符串首次出现的位置


#include <stdio.h>

// 查找子字符串第一次出现的位置
const char *searchString(const char *string, const char *subString)
{
    const char *myStr = string;
    const char *mySub = subString;
    // 匹配到最后一个结束循环
    while (*mySub != '\0') {
        // 逐个匹配,如果当前字符不是要匹配的第一个字符,就跳过本次循环
        if (*mySub != *myS...

Read more

C语言malloc、calloc、realloc的区别


C语言跟内存分配方式

  • 从静态存储区域分配.
    内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量、static变量.
  • 在栈上创建

    在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放.栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限.
  • 从堆上分配,亦称动态内存分配.

    程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存.动态内存的生存期由用户决定,使用非常灵活,但问题也最多.

C语言跟内存申请相关的函数主要有 alloca、call...

Read more

C 函数sprintf()


声明

int sprintf(char *str, const char *format, ...)

参数

str -- 这是指向一个字符数组的指针,该数组存储了 C 字符串。
format -- 这是字符串,包含了要被写入到字符串 str 的文本。它可以包含嵌入的 format 标签,format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化

返回值

如果成功,则返回写入的字符总数,不包括字符串追加在字符串末尾的空字符。如果失败,则返回一个负数。

Example

#include <iostream>

static void test()
{
    // 1...

Read more

C字符串反转


// 两种方式编写 字符串反转
static void reverseString(char *str)
{
    if (NULL == str) {
        return;
    }
    size_t len = strlen(str);
#if 0
    size_t start = 0;
    size_t end = len - 1;
    while (start < end) {
        char temp = str[start];
        str[start] = str[end];
        str[end] = te...

Read more

const 全局和局部变量


const 作为局部变量 初始化为常量表达式 需要定义在头文件中 可以被多个文件共享

const 作为全局变量 初始化不是常量表达式 不可以定义在头文件中 需要定义在源文件中 为了能使多个文件共享 需要在头文件中声明 添加extern

// const 修饰的 全局变量,放在常量区, 一旦初始化,不能直接修改,也不能通过指针修改
const int g_c = 10;
__unused static void test10()
{
    // 拿到g_c的内存地址
    int *p = (int *)&g_c;
    // 通过指针修改这块内存的值
    *p = 200...

Read more

Mac 安装qt


  • 通过mac的homebrew安装qt
    brew install qt
    此步骤安装完成后,终端会显示安装完成后的最终目录 /usr/local/opt/qt
  • 下载并安装qtcreator 使用homebrew

    brew install qt-creator

    或者 选择需要的版本下载即可

    http://download.qt.io/official_releases/qtcreator/
  • 配置 上面两条命令之间是没有关联的,后装的qt-creator不会自动检测到前面的qt(qt这个包是QT开发工具链),所以需要配置。

通过brew info qt命令,查看详情

swaedeM...

Read more

MAC 软件提示已损坏,需要移到废纸篓的解决方法


解决方法一:

允许任何来源的应用。在系统偏好设置里,打开“安全性和隐私”,将“允许从以下位置下载的应用程序”设置为“任何来源“。当然,这个设置已经无法在Mac OS Sierra上完成了。

  • 打开终端(Terminal),输入以下命令后回车,输入密码 sudo spctl --master-disable
  • 重新运行下载的应用程序

解决方法二:

移除这个应用的安全隔离属性,操作如下:

  • 打开终端(Terminal),输入以下命令后回车,如需要,请输入密码 xattr -r -d com.apple.quarantine /Applications/CleanMyMac\ X.app /A...

Read more

[iOS] Reason: image not found 解决办法


创建好sdk的framework project后,又创建了一个demo的 project,最后创建一个workspace, 添加这两个project到workspace,配置完成后运行报错:

dyld: Library not loaded: @rpath/GooglePlaces.framework/GooglePlaces
  Referenced from: /var/containers/Bundle/Application/FCA946EB-EA08-49D9-8D3C-4C6673EB495A/GooglePlacesDemo.app/GooglePlacesDemo
  ...

Read more