C
文章平均质量分 97
chenxizhan1995
这个作者很懒,什么都没留下…
展开
-
C语言修改dos窗口的大小
Windows在Window32下:system("mode con cols=30 lines=20");里面的数字可以改:char stCmd[128];sprintf("mode con cols=%d lines=%d", height, width);system(stCmd); 获取dos窗口的大小 mode /statusLinuxbash 有环境变量 COLUMN...原创 2019-12-16 16:22:13 · 1313 阅读 · 0 评论 -
mintty运行windows本地程序时输入输出的缓冲问题
printf函数的输出缓冲问题问题描述printf函数使用了行缓冲,只有输出了换行符才刷新输出。但如果需要读取用户输入,同样会刷新stdout的输出缓冲,而不论是否有换行。#include <stdio.h>int main(void){ int a; printf(input: "); scanf("%d", &a); printf(...原创 2019-11-27 01:37:20 · 346 阅读 · 0 评论 -
C语言有符号数和无符号数进行比较的陷阱
当有符号数和无符号数比较的时,如果有符号数的类型低于无符号数的类型,会发生类型提升,要当心。只要有一个操作数是无符号数,另一个也会被转成无符号数,这种说法是不对的;理由是,实际的转换是按类型大小关系进行的,但并不是所有的无符号数都高于有符号数。long long 类型就高于 unsinged int 类型。#include <stdio.h>int main(void){ /...原创 2019-11-24 02:11:44 · 1242 阅读 · 0 评论 -
C语言qsort()函数中传入的比较函数,其参数类型
问题描述一个字符串排序程序,但运行结果不对。/* file: test.c用户输入三个字符串,程序排序后按升序输出。*/#include <stdio.h>#include <string.h>#include<stdlib.h>int cmp(char *s1, char *s2) { return strcmp(s1, s2);}...原创 2019-11-22 20:44:43 · 812 阅读 · 0 评论 -
打印素数表
埃氏筛法#include <stdio.h>#include<stdlib.h>int main(void){ long N; scanf("%ld", &N); char * comp = calloc(N, 1); comp[1] = 1; comp[2] = 0; for (int i = 2; i*i...原创 2019-11-22 10:55:42 · 176 阅读 · 0 评论 -
C语言格式化输出
printf函数,输出整数,ll i,d,o,u,x 输出一字节宽度的数据;但是win32/win64不支持,在win32/win64上,支持的最短整型是shortz i,d,o,u,x 输出 size_t 类型的整数(C99),但win32/win64不支持,在win32/win64上,用 %Iuj i,d,o,u,x 输出 intmax_t, uintmax_t(C99),但win32/...原创 2019-11-21 18:13:21 · 500 阅读 · 0 评论 -
从预定义宏区分编译环境
C标准没有定义用来识别操作系统的宏,只能检测各个编译器自带的宏定义要做跨平台编译,gcc跨Linux/Windows/Mac平台,所以这里只说gcc编译器下怎么区分操作系统可以用以下命令行获取GCC定义的预编译宏:$ < /dev/null gcc - -march=i386 -dM -E < /dev/null | sort (i386可替换为arm64等)$ gcc...原创 2019-11-21 02:05:57 · 1371 阅读 · 0 评论 -
GMP手册笔记
GMP 6.1.2使用GMP时,不要使用本文档未说明的函数、宏、数据类型,否则保证你的程序不与未来版本的GMP兼容。基础概念头文件和库使用GMP所需要的一切声明都汇集到了头文件gmp.h里,此头文件同时适用于C和C++。GMP中有些函数接受FILE*参数,只有当同时包含了stdio.h时,这些函数才是可用的。#include <stdio.h>#include <g...原创 2019-11-20 01:17:07 · 9330 阅读 · 9 评论 -
7-19 计算天数 (15 分) - 错题总结
原题/*7-19 计算天数 (15 分)本题要求编写程序计算某年某月某日是该年中的第几天。输入格式:输入在一行中按照格式“yyyy/mm/dd”(即“年/月/日”)给出日期。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。闰年的2月有29天。输出格式:在一行输出日期是该年中的第几天。输入样例1:2009/03/02输出样例1:6...原创 2019-11-19 02:06:27 · 1079 阅读 · 0 评论 -
#!的作用(shebang)
经常见到shell脚本的开头有这么一句 #!/bin/bash 或者 #!/bin/bash -x。#!`的后面紧跟可执行程序的完整路径,在后面可以跟参数,但操作系统把这后面的所有参数当成一个参数。#!后面如果跟参数,最好只跟一个,多了还得自己处理试验脚本:advice2#!./fakeawk -f hello world 'ok are you'C程序// file: fak...原创 2019-11-13 21:34:39 · 714 阅读 · 1 评论 -
给定字符串,拆分成单词
问题用C编写函数将一个字符串中所有单词摘出来到一个新的二维数组中(字符串中有数字和字母)例如aaa111aa11a1变换之后是三个字符串aaa,aa,a程序/*给定一行文本,拆分成单词。主要用到三个 string.h 中的库函数1. strncpy(s, ct, n); 把字符从 cn 复制到 s 中,最多复制 n 个字符;2. strpbrk(cs, ct) 在字符串 cs...原创 2019-11-13 00:45:46 · 2480 阅读 · 0 评论 -
6-25 链表拼接 (20 分)
原题链接题目的大意是给定两个升序单链表,合并成要给链表,合并后仍然升序,题目要求实现的是mergelist()函数。数据结构中讲归并排序的链表实现时,其中的一个步骤就是合并链表。程序#include <stdio.h>#include <stdlib.h>struct ListNode { int data; struct ListNode *...原创 2019-11-12 19:33:46 · 2365 阅读 · 0 评论 -
gcc编译inline函数报错:未定义的引用
一个简单的inline函数inline void swap(char *x, char *y){char t = *x; *x=*y; *y=t;}编译的时候报错gcc --std=c11 -Wall -c -o permutation.o permutation.cgcc permutation.o -lgmp -o permutationpermutation.o:pe...原创 2019-11-11 03:29:28 · 9049 阅读 · 5 评论 -
Makefile 自动处理头文件依赖
自动处理头文件依赖gnu make手册提供的脚本sources:=foo.c bar.cinclude $(sources:.c=.d)%.d: %.c set -e; rm -f $@; \ $(CC) -MM $(CPPFLAGS) $< > $@.$$$$; \ sed 's,\($*\).o[ :]*,\1.o $@: ,...原创 2019-11-10 23:32:01 · 1063 阅读 · 0 评论 -
本地Linux虚拟机搭建sambda记录
本机环境Win10。使用win10的HyperV搭了一个CentOS虚拟机。搭建动机:学习C编程,发现Windows上的MSYS+MinGW环境不够原汁原味,有些抠细节的东西(比如glibc)不大一样。在Linux上使用vim编写代码是一种痛苦。于是在Linux搭建samba服务器,然后在windows上映射成驱动器。这样在Windows上编辑,在Linux上编译,完美。$ sudo yum ...原创 2019-11-09 11:31:33 · 638 阅读 · 0 评论 -
printf()和scanf()
GNU关于printf()函数的说明。原来C的printf()也支持参数索引。scanf()还支持字符过滤。#include <stdio.h>int main(void){ int a=9898; printf("%1$d, %1$d, %1$d\n", a); char s[100]; int ret = scanf("%99[0-9]",s);...原创 2019-11-09 01:19:36 · 144 阅读 · 0 评论 -
GMP 6.1.2 安装记录
GMP官网https://gmplib.org/GMP是开源免费的高精度数学计算库(GNU Multiple Mrecision arithmetic library),它针对各种型号的CPU编写汇编代码、使用复杂算法实现高效率的高精度计算。GMP原生提供C接口,同时也封装了一层C++接口。使用GMP之前,必须读一读文档的第三章3 GMP Basics。自己安装GMP,阅读2 Installi...原创 2019-11-09 00:55:51 · 4510 阅读 · 2 评论 -
gcc动态库与动态库生成和链接
gcc 生成共享库gcc -fPIC -c foo.c -o foo.ogcc -fPIC -c bar.c -o bar.ogcc -shared foo.o bar.o -o libz.sogcc main.c -lz -L. -o main这样生成的共享库还差点意思gcc -shared -Wl,-soname,libname.so.x lib foo.o bar.o -o l...原创 2019-11-07 21:16:53 · 444 阅读 · 0 评论 -
当strstr()遇到空串
写了个小程序,了解一下C的字符串搜索函数strstr()是怎么处理空串的。程序#include <stdio.h>#include <string.h>// 在字符串`s`中搜索`p`,const char *s[] = {"abcd", ""};const char *p[] = {"b", "A", ""};int main(void){ char...原创 2019-11-05 23:45:08 · 2655 阅读 · 0 评论 -
MinGW-GCC中的`printf()`不能识别 llu 说明符
void show_array(ull arr[], int size){ int col = 5; for (int i = 0; i<size;i++){ printf("%-4llu", arr[i]); if (i%col+1 == col) printf("\n"); } if (size%col != col) pr...原创 2019-11-04 02:39:11 · 1563 阅读 · 0 评论 -
gcc 内联函数编译报错
问题描述一段很简单的代码,使用了内联函数,编译竟然报错。惊呆了,记下来防止遗忘。#include <stdio.h>#include <stdbool.h>inline int sum(int a, int b){ return a+b;}int main(int argc, char * argv[]){ int a,b; a=3;b...原创 2019-11-04 02:09:29 · 948 阅读 · 0 评论 -
C语言的类型转换
语句和表达式通常应该只是用一种类型的变量和常量,如果使用混合类型,C使用一个规则集来完成自动类型转换。基本的规则当出现在表达式中,无符号和有符号的char、short都被自动转为int;当short和int长度相同时,无符号short被转为unsigned int。K&R C 中,float还会被提升为 double;如今的C不这样了。(自动提升)在包含两种类型的任何云算力,两个值都...原创 2019-11-03 20:54:01 · 746 阅读 · 0 评论 -
C语言数据长度
一种说法,整型所占空间大小和CPU相关但是 MinGW 的64 位gcc编译器下,long 是32位的。查了资料,原来C标准没有规定long必须是64位的。C标准只规定了 int 的长度不低于 short,long 的长度不低于 int。实际上,C保证short至少有16位长,long至少有32位长,long long 至少64位长。#include <stdio.h>#...原创 2019-11-03 20:31:09 · 1800 阅读 · 0 评论 -
PTA习题(C语言版本)- 1020 月饼 (25 分)
1020 月饼 (25 分)#include <stdio.h>#include <stdlib.h>#define SZ 1000typedef struct { double a,b,c; // 总量、总售价、单价}T;T b[SZ];// 比较函数int cmp(const void * v1, const void *v2){ ...原创 2019-11-03 04:39:05 · 667 阅读 · 0 评论 -
PTA习题(C语言版本)- 1011 A+B 和 C (15 分)
1010 一元多项式求导 (25 分)设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为nxn−1。)输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。输出格式:以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为...原创 2019-11-03 03:14:13 · 1740 阅读 · 0 评论 -
PTA习题(C语言版本)-1010 一元多项式求导 (25 分)
1010 一元多项式求导 (25 分)设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为nxn−1。)输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。输出格式:以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为...原创 2019-11-03 02:52:03 · 457 阅读 · 0 评论 -
strtok()函数使用示例
/* 单词分割用 string.h 的 strtok() 函数做单词分割。*/#include <stdio.h>#include <string.h>#define N 120char san[N+1] = "hello world ok";char delim[] = " ,";// 用空格和逗号做分割符int main(int argc, cha...原创 2019-11-03 00:19:27 · 311 阅读 · 0 评论 -
errno.h 示例
示例1代码// file: test.c// #include <stdio.h>#include <errno.h>#include <math.h>int main(void){ errno = 0; exp(1e10); if (errno == ERANGE) perror("Error occu...原创 2019-11-02 23:35:05 · 855 阅读 · 0 评论 -
*p 和 p[] 的等价性
C语言中,除了声明函数形参,别的地方char *p 和 char p[] 不等价。#include <stdio.h>char arr[N];int main(void){ char a[] = {"hello"}; char *p = "hello"; printf("%zd\n",sizeof(a)); // 6 printf("%zd\n",...原创 2019-11-02 20:21:38 · 747 阅读 · 0 评论 -
PTA习题(C语言版本)- 1003 我要通过! (20 分)
原题如下“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。得到“答案正确”的条件是: 字符串中必须仅有 P、 A、 T这三种字符,不可以包含其它字符; 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组...原创 2019-11-02 07:47:12 · 7227 阅读 · 1 评论 -
三目运算符
三目运算符是右结合的,所以 a ? b : c ? d : e将按a ? b : (c ? d : e)执行。如果没有结合性,a ? b : c ? d : e既可以理解成 a ? b : (c ? d : e) 也可以理解成 (a?b:c)?d:e。从文法推导理解结合性,右结合对应最左推导,左结合对应最右推导。从语法树上理解结合性,先计算最右边的,左结合先计算最左边的。比如,给定文法 ...原创 2019-11-01 16:32:27 · 166 阅读 · 0 评论