memset
对一段内存空间全部设置为某个字段
memset ( void * buffer , int c, int count )
把buffer所指的内存区域 前count位设置为c
memcpy
void * memcpy( void * dest , const void * src , size_t n )
有src的地址为起始地址 连续n个字节的数据复制到dest指向的内存空间内。
#include<stdio.h>
#include<string.h>
intmain(void)
{
charsrc[] = "******************************";
chardest[] = "abcdefghijlkmnopqrstuvwxyz0123as6";
printf("destinationbefore memcpy: %s\n", dest);
memcpy(dest,src, strlen(src));
printf("destinationafter memcpy: %s\n", dest);
return0;
}
输出结果:
destinationbefore memcpy:abcdefghijlkmnopqrstuvwxyz0123as6
destinationafter memcpy: ******************************as6
sprintf()
格式化字符,把变量打印进去。
eg:char c[100];
int k =255;
sprintf(c , "%d" , k) // 包含255
sscanf()
sscanf("12345abcdABCD" , "%[1-9a-z]s" , str)
printf("%s\n" , str)
/*12345abcd*/
fork()
返回两次:子进程返回0,父进程返回1(可以用作判断)
http://zhidao.baidu.com/question/21730211.html(格式)
strcpy strncpy strlcpy
char buf[8];
strncpy( buf, "abcdefgh", 8 );
看这个程序,buf 将会被 "abcdefgh" 填满,但却没有 /0 结束符了。
另外,如果 s2 的内容比较少,而 n 又比较大的话,strncpy 将会把之间的空间都用 /0 填充。这又出现了一个效率上的问题,如下:
char buf[80];
strncpy( buf, "abcdefgh", 79 );
上面的 strncpy 会填写 79 个 char,而不仅仅是 "abcdefgh" 本身。
strncpy 的标准用法为:(手工写上 /0)
strncpy(path, src, sizeof(path) - 1);
path[sizeof(path) - 1] = '/0';
len = strlen(path);
strcpy(),以源串中的'/0'为拷贝结束标志,直到遇到该NULL为止,然后将NULL拷贝上.
strncpy()以第三个参数N为拷贝结束标志,如果source的长度小于N,则剩余的字符全部用NULL填充.
如果source的长度大于N,则从source中截取前N个字符,拷贝过去.
而使用 strlcpy,就不需要我们去手动负责 /0 了,仅需要把 sizeof(dst) 告之 strlcpy 即可:
strlcpy(path, src, sizeof(path));
len = strlen(path);
if ( len >= sizeof(path) )
printf("src is truncated.");
并且 strlcpy 传回的是 strlen(str),因此我们也很方便的可以判断数据是否被截断
例如:
for(;;)语句
相当于:
while(1)语句
- 表达式1可以是设置循环变量的初值的赋值表达式,也可以是其他表达式。
sig_t signal(int signum,sig_t handler);
signal()会依参数signum 指定的信号编号来设置该信号的处理函数。当指定的信号到达时就会跳转到参数handler指定的函数执行。当一个信号的信号处理函数执行时,如果进程又接收到了该信号,该信号会自动被储存而不会中断信号处理函数的执行,直到信号处理函数执行完毕再重新调用相应的处理函数。但是如果在信号处理函数执行时进程收到了其它类型的信号,该函数的执行就会被中断。
返回值:返回先前的信号处理函数指针,如果有错误则返回SIG_ERR(-1)。
setjmp
#include <signal.h>
void handler()
{
printf("hello\n");
}
main()
{
int i;
signal(SIGALRM, handler);
alarm(5);
for(i = 1; i < 7; i++)
{
printf("sleep %d ...\n", i);
sleep(1);
}
}
执行:
sleep 1 ...
sleep 2 ...
sleep 3 ...
sleep 4 ...
sleep 5 ...hello
sleep 6 ...
如果 sqlca.sqlcode 小于 0 那么就是发生了某种严重的错误,象数据库定义与查询定义不一致等.
如果大于 0 则是通常的错误,象表不包括所要求的行等.