GCC下“initializing ‘char **’ with an expression of type ‘const char **’ discards qualifiers in nested pointer types”警告解读

我曾经被这个警告困扰了好久好久,问了好些人,都说没遇到过=_=…
问题代码片段(与问题无关的代码块已被忽略):

size_t MyConv(const char *orginStr, const char *targetStr, ...) {
    char **tmpIn = NULL;[......]

继续阅读

在Linux下利用宏定义的方式使用Sleep函数

前言

Sleep是存在于Windows.h头文件中用于将进程挂起的函数。显然,Linux下是没有该头文件的,该如何实现呢?

实现方法

Linux的unistd.h库为我们提供了类似功能的usleep函数,但该函数的计时单位是微妙而不是和Sleep一样使用毫秒计时。
为了方便程序的跨平台开发,可以使用[……]

继续阅读

GNU出品的转码库——libiconv v1.15 for windows x64下载(已经过编译)

libiconv库是GNU项目的一部分,负责对字符进行不同编码间的转换。是Linux下非常常用的编码转换库,其对应的命令是:iconv(命令的使用方法可以百度了解下)。

libiconv库原生支持Windows平台,但考虑到很多人为了追求效率而不想自己动手编译这个庞大而复杂的库,故我在这里为大家提供已[……]

继续阅读

C语言操作文件时写完一组数据后立即刷新缓存区的方法

前言

很多时候,为了防止程序意外结束等原因造成的数据丢失,我们需要在向文件写入一组数据以后立即刷新缓存区。比如说:在写程序LOG的时候,为了防止程序崩溃时无法记录LOG,就需要记录一条LOG就刷新一次缓存区以使其立即写入磁盘文件。

实现方法

使用C标准库提供的fflush(FILE *)函数可以很方[……]

继续阅读

原来C语言的数组大小可以是一个变量呀!

长久以来,我一直以为C语言的数组大小必须是在编译前就确定下来的常量值,相信很多C语言初学者也是和我一样的认识。然而,直到今天我才发现原来从C99标准开始C语言就已经支持了可变长数组

例如如下程序(注:VS系列编译器均不支持该特性,搞不懂微软为何不好好支持C99标准):

#include <std[......]

继续阅读

C语言实现Linux下遍历指定目录批量搜索及替换文件中关键字的小工具

为什么要写这样一个程序呢?

兼职做IDC的我经常会需要帮客户改网站,很多时候会需要将用户网站中所有脚本文件中的某一关键字进行替换(可能是品牌名称、网址等),在Windwos下一般都是用Dreamweaver来实现的,但总有一种杀鸡用牛刀的感觉。后来电脑重装为Linux平台后一直没发现好的批量替换工具[……]

继续阅读

C语言实现删除一个字符串中的指定字母

题目要求

删除一个字符串中的指定字母,如:字符串 “hello,world!”,删除其中的 o 字母,应输出 “hell,wrld!”

解题思路

将字符串内不属于需搜索的字符的字符再赋值到该字符串的地址空间中,最后再在字符串结尾加上结束标记\0

程序代码

#include <stdio.h&[......]

继续阅读

C语言依据用户输入的数据大小动态开辟内存空间

前言

使用C语言编程时经常需要从各种途径读取数据并将其保存在内存中,但C语言为了保持简洁,所以只包含一些很基础的数据类型,有时候并不能很好的存储用户输入的数据。
例如:需要存储用户输入的字符串,通常,教科书上所教的方法是分配一个较大的数组来进行存储。显然,这在实际生产环境中是相当不切实际的。
为了相[……]

继续阅读

解决Ubuntu下无法使用pthread库的问题(加-lpthread也不好使的情况)

导语

这个问题困扰了我很久,因为写一个飞机大战的小游戏需要用到多线程。看到Linux下的多线程可以用pthread.h库来实现,但该库不是C的标准库,所以编译的时候要加上-lpthread,可是,为在我的Ubuntu 16.04下如此编译的结果是报了这个错误:

/usr/bin/ld: 找不到 -l[……]

继续阅读

使用C11新增的多线程支持库-threads.h进行多线程编程

2019年12月6日更新

首先要感谢评论区的热心的同学们的提醒,经本人亲自验证:

VS 2019中移除了对threads.h的支持(评论区有同学提到单独安装v140工具集可以实现支持,但是测试发现没有效果),而GCC方面则在最新版中加入了对该头文件的支持。

以下为原文(程序代码部分更新了Linu[……]

继续阅读