@[TOC]
atof 字符数字double化
double atof(const char *str)
返回的是浮点数
参数是一个字符串数字
如果处理失败就返回0
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str[20]="3.1415926";
printf("字符串值 = %s, 浮点值 = %lf\n", str, atof(str));
return 0;
}
输出
字符串值 = 3.1415926, 浮点值 = 3.14159
请按任意键继续. . .
atoi 字符数字 int 化
int atoi(const char *str)
const char *str
:字符串数字
返回字符串的int值
如果处理失败就返回0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str[20]="3.1415926";
printf("字符串值 = %s, 整型值 = %d\n", str, atoi(str));
return(0);
}
输出
字符串值 = 3.1415926, 整型值 = 3
请按任意键继续. . .
atol 字符数字long int 化
#include <stdio.h>
#include <stdlib.h>
int main()
{
long NUm;
char str[20];
strcpy(str, "98993489");
NUm = atol(str);
printf("字符串值 = %s, 长整型值 = %ld\n", str, NUm);
return(0);
}
同时也要注意数据的范围是不是超对应的数据
itoa 数字字符串化
char *itoa(int S_NUm,char *D_Str,int base);
数字源
目的字符串
以多少进制写进去
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int S_NUm = 1725;
char D_Str[10]={0};
int base=10;
itoa(S_NUm,D_Str,base);
printf("integer = %d string = %s\n",S_NUm,D_Str);
return 0;
}
类似的还有很多
abort 异常退出
void abort(void)
没有返回值,只是到时候中途退出
#include <stdio.h>
#include <stdlib.h>
int main ()
{
FILE *fp;
printf("准备打开 xxxx_nofile.txt\n");
fp = fopen( "xxxx_nofile.txt","r" );
if(fp == NULL)
{
printf("准备终止程序\n");
abort();
}
//不会执行
printf("准备关闭 nofile.txt\n");
fclose(fp);
return(0);
}
输出
准备打开 xxxx_nofile.txt
准备终止程序
atexit 正常退出时调用自定义的函数
int atexit(void (*func)(void))
如果函数成功注册,则该函数返回零,否则返回一个非零值。
#include <stdio.h>
#include <stdlib.h>
void func()
{
printf("我是程序最后的退出关口A\n");
}
int main ()
{
/* 注册终止函数 */
atexit(func);
printf("启动主程序...\n");
printf("退出主程序...\n");
return(0);
}
getenv() 返回一个对象在计算机的位置的字符串指针
char *getenv(const char *name)
#include <stdio.h>
#include <stdlib.h>
int main ()
{
printf("PATH : %s\n", getenv("PATH"));
printf("HOME : %s\n", getenv("HOME"));
printf("ROOT : %s\n", getenv("ROOT"));
return(0);
}
然后会输出地址
没有就返回null
bsearch() 二分操作
下面是 bsearch() 函数的声明。
void *bsearch(const void *key, const void *base, size_t nitems, size_t size, int (*compar)(const void *, const void *))
- key-- 指向要查找的元素的指针,类型转换为 void*。
- base-- 指向进行查找的数组的第一个对象的指针,类型转换为 void*。
- nitems-- base 所指向的数组中元素的个数。
- size-- 数组中每个元素的大小,以字节为单位。
- compar-- 用来比较两个元素的函数
函数cmpfunc
int cmpfunc(const void *p1, const void *p2);
如果 cmpfunc 返回值小于 0(< 0),那么 p1 所指向元素会被排在p2所指向元素的前面
如果 cmpfunc 返回值等于 0(= 0),那么 p1 所指向元素与 p2 所指向元素的顺序不确定
如果 cmpfunc 返回值大于 0(> 0),那么 p1 所指向元素会被排在 p2 所指向元素的后面。
这段代码有问题
可能死机
#include <stdio.h>
#include <stdlib.h>
int cmpfunc (const void * a, const void * b)
{
const int *aa = (int*) a;
const int *bb = (int*)b;
if (*aa < *bb)
return -1;
else if (*aa > *bb)
return 1;
else
return 0;
}
int arr[10] = { 9,8,7,6,5,4,3,2,1,0};
int main ()
{
int *item;
int answer = 2;
int* get_what=&answer;
int how_many=10;
int single_len=sizeof (int);
item = (int*) bsearch (get_what, arr, how_many,single_len, cmpfunc);
if( item != NULL )
{
printf("Found item = %d\n", *item);
}
else
{
printf("Item = %d could not be found\n", *item);
}
return(0);
}
qsort 自动排序
void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))
qsort(values, 5, sizeof(int), cmpfunc);
base: 一个数组的地址
nitems:数组的长度
size:每个数据的长度
int (*compar)(const void , const void)):函数指针
#include <stdio.h>
#include <stdlib.h>
int values[] = { 1,3,5,2,4, };
int cmpfunc (const void * a, const void * b)
{
const int *aa = (int*) a;
const int *bb = (int*)b;
if (*aa < *bb)
return -1;
else if (*aa > *bb)
return 1;
else
return 0;
}
int main()
{
int n;
printf("排序之前的列表:\n");
for( n = 0 ; n < 5; n++ ) {
printf("%d ", values[n]);
}
qsort(values, 5, sizeof(int), cmpfunc);
printf("\n排序之后的列表:\n");
for( n = 0 ; n < 5; n++ ) {
printf("%d ", values[n]);
}
return(0);
}
compare的写法
int cmpfunc (const void * a, const void * b)
{
const int *aa = (int*) a;
const int *bb = (int*)b;
if (*aa < *bb)
return -1;
else if (*aa > *bb)
return 1;
else
return 0;
}
不安全的,有可能会产生溢出。
int cmpfunc (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
int cmpfunc (const void * a, const void * b)
{
return *(int *)a < *(int *)b ? -1 : *(int *)a > *(int *)b;
}
mblen()
int mblen(const char *str, size_t n)
str -- 指向多字节字符的第一个字节的指针。 n -- 要检查的字符长度的最大字节数。
不太理解
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int len;
char *pmbnull = NULL;
char *pmb = (char *)malloc( MB_CUR_MAX );
wchar_t *pwc = L"Hi";
wchar_t *pwcs = (wchar_t *)malloc( sizeof( wchar_t ));
printf("转换为多字节字符串\n");
len = wcstombs( pmb, pwc, MB_CUR_MAX);
printf("被转换的字符 %d\n", len);
printf("第一个多字节字符的十六进制值:%#.4x\n", pmb);
len = mblen( pmb, MB_CUR_MAX );
printf( "多字节字符 %x 的字节长度:%u\n", pmb, len );
pmb = NULL;
len = mblen( pmb, MB_CUR_MAX );
printf( "多字节字符 %x 的字节长度:%u\n", pmb, len );
return(0);
}
输出
转换为多字节字符串
被转换的字符 1
第一个多字节字符的十六进制值:0x168c6010
多字节字符 168c6010 的字节长度:1
多字节字符 0 的字节长度:0
类似的还有
size_t mbstowcs( wchar_t* dst, const char* src, std::size_t len);
int mbtowc(whcar_t *pwc, const char *str, size_t n)
size_t wcstombs(char *str, const wchar_t *pwcs, size_t n)
int wctomb(char *str, wchar_t wchar)