C/常用函数

维基教科书,自由的教学读本
< C

←回到C


标准I/O[编辑]

stdio.h中的常用函数。

printf[编辑]

转换说明符

转换说明符 意义 实例 输出
%a 浮点数、十六进制数字和p-记数法(C99)
%A 浮点数、十六进制数字和P-记数法(C99)
%c 单个字符
%d 有符号十进制数
%e 浮点数、e-记数法
%E 浮点数、E-记数法
%f 浮点数、十进制记数法
%g 根据数值不同自动选择%f或%e;%e格式在指数小于-4或者大于等于精度时使用
%G 根据数值不同自动选择%f或%E;%E格式在指数小于-4或者大于等于精度时使用
%i 有符号十进制整数(与%d相同)
%o 无符号八进制整数
%p 指针
%s 字符串
%u 无符号十进制整数
%x 使用十六进制数字(字母小写)的无符号十六进制整数
%X 使用十六进制数字(字母大写)的无符号十六进制整数
%% 打印百分号

修饰符

修饰符 意义 实例 输出
+/- 修饰数字修饰符,表示正负
空格
#
数字 整数部分表示最小字段宽度,小数部分表示精度
h 表示short,修饰整数表示有符号或无符号短整型
hh 表示short short,修饰整数表示有符号或无符号char型
j 修饰整数表示intmax_t或uintmax_t值
l 表示long,修饰整数表示有符号或无符号长整型
ll 表示long long,修饰整数表示有符号或无符号长长整型
L 表示long,修饰浮点数表示long double值
t 修饰整数表示一个ptrdiff_t值(C99)
z 修饰整数表示一个size_t值(C99)

scanf[编辑]

#include <stdio.h>
int main(){
    int a,b,c;
    printf("input a,b,c\n");
    scanf("%d%d%d",&a,&b,&c);
    printf("a=%d,b=%d,c=%d",a,b,c);
    return 0;
}

getchar[编辑]

int getchar(void)
{
  static char buf[BUFSIZ];
  static char* bb = buf;
  static int n = 0;
  if ( n == 0 )
 {
   n = read(0, buf, BUFSIZ);
   bb = buf;
  }
return(--n >= 0) ? (unsigned char)*bb++ : EOF;
}

putchar[编辑]

gets[编辑]

puts[编辑]

puts()函数将一串字符串输出后换行。

#include <stdio.h>
int mainint argc, char* argv[]
{
    char str[] = "We are same.";
    puts(str);
    printf("%s\n", str );//该语句与上一条语句等效。
}

数学[编辑]

math.h中的常用函数。

記憶體[编辑]

realloc[编辑]

#include <stdio.h>
#include <stdlib.h>
int mainint argc, char* argv[]{
	char *s=NULL, *s_new=NULL;
	int i;

	s=(char*)malloc( 32 );
	bzero( s, 32 );
	strcpy( s, "Hello! world" );
	
	for(i=0;i<100;++i) {
		s_new=(char*)realloc( s, (1+i)*1024 );
		s=s_new;
		strcat( s, " 01234567890");
		printf("%d %s\n", i, s );
	}
	free( s );
}

型態轉換[编辑]

atoi[编辑]

#include <stdio.h>
#include <stdlib.h>
int mainint argc, char* argv[]
{
    char str[] = "100";              /* 宣告字串 */
    printf("%d\n", atoi( str ) );    /* 轉換字串為數值, 同理可證 atol, atoll, atof */
}

字串處理[编辑]

sprintf[编辑]

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

可以將輸出的字串存取至另一個字串

#include<stdio.h>
#include<string.h>
int main(int argc, char* argv[])
{
    char buffer[50];
    const char str[] = "Jack";
    int n;

    // 輸出 "Hello, my best friend, Jack"
    // 同時將輸出結果存至 buffer,n 值設為 28
    n = sprintf(buffer, "Hello, my best friend, %s.", str);
    
    // 輸出 "[Hello, my best friend, Jack] has 28 characters."
    printf("[%s] has %d characters.", buffer, n);

    return 0;
}

sscanf[编辑]

strcmp[编辑]

int strcmp ( const char* str1, const char* str2 );

比較 str1 與 str2 兩字串,若完全相等,則回傳 0。若不相等,則傳回非 0 之值。

#include <stdio.h>
#include <string.h>
int main( int argc, char* argv[] )
{
    // 在 ACSII 中,A 的值(65)小於 B 的值(66),故回傳小於 0 的值
    // 輸出 "strcmp(AA,BB) = -1"
    printf("strcmp(AA,BB) = %d\n", strcmp( "AA", "BB" ) ); 

    // 輸出 "strcmp(BB,AA) = 1"
    printf("strcmp(BB,AA) = %d\n", strcmp( "BB", "AA" ) );

    // 輸出 "strcmp(CC,CC) = 0"
    printf("strcmp(CC,CC) = %d\n", strcmp( "CC", "CC" ) );

    return 0;
}

strcpy[编辑]

strcat[编辑]

strlen[编辑]

strlen()函数返回一个记录字符串长度(不计入字符串结束符‘\0’)的整数。

#include<stdio.h>
#include<string.h>
int mainint argc, char* argv[]
{
    char str[] = "Length";
    printf("%d\n", strlen(str) );//输出6
}

演算法[编辑]

qsort[编辑]

標準C函式庫有內建Quick sort演算法,使用時,需傳入比較函數,讓qsort()能作比較。

#include <stdio.h>
#include <stdlib.h>
#define nmemb 7
int compare( const void *a, const void*b ) {
	int *aa=(int*)a, *bb=(int*)b;
	if(*aa>*bb) return 1;
	if(*aa==*bb) return 0;
	if(*aa<*bb) return -1;
}
int mainint argc, char* argv[]{
	int base[nmemb]={ 3, 102, 5, -2, 98, 52, 18};
	int i;
	printf("Original...\n");
	for(i=0;i<nmemb;++i)
		printf"%d \n", base[i];
	qsort( base, nmemb, sizeof(int), compare );
	printf("after qsort...\n");
	for(i=0;i<nmemb;++i) 
		printf"%d \n", base[i];
}