感觉视乎挺可笑的,毕业之时就想找C语言的开发工作,但是无缘无故竟然做了PHP开发,但是没想到两年之后又重新开始思考转向C语言的程序开发。今天是正式学习的半天,感觉有些东西很生疏,和PHP这样弱类型的语言比较C的语法又显得那么的严谨。第一个函数写的是字符串过滤首尾的空格、回车、Tab键以及换行的程序,结果放下了两个错误。我也这也是初学程序员经常放下的错误吧,故在此做一下记录。
首先是字符串变量的定义。
例如
char *str ="this is test!";
这样定义意味着什么?与下面的方式有什么区别?
char str[] = "this is test!";
这样的两种定义方式都没错误,但是第一种方式定义的结果是str 指向的是一个常量空间地址,其地址空间使用的内容是不能在以后使用过程被更改的。相当于
const char str[] = "this is a test!";
不知道我这样理解是否正确。
还有一个问题就是sizeof的用法问题,sizeof是计算一种变量类型所占据的地址空间,不能用sizeof(变量名),这样计算结果往往是错误的。
最后一个问题就是关于sscanf的使用,这个函数使用起来有点让人费解:
例如:
const char *pattern = "test:10";
int nlen1 = 0;
int nreturn = 0;
char szStr[20] = {'/0'};
nreturn = sscanf(pattern, "%3s:%d", szStr, &nlen1);
这样的结果是这样的 1 tes 0
换成这样:
nreturn = sscanf(pattern, "%4s:%d", szStr, &nlen1);
2 test 10
在换成:
nreturn = sscanf(pattern, "%[a-z]4s:%d", szStr, &nlen1);
nreturn = sscanf(pattern, "%[^:]4s:%d", szStr, &nlen1);
又变成了
1 tes 0
好像[] 添加了修饰之后不能再添加其他的s 以及 长度的修饰,总是和想象的不一致,这个函数的使用还是比较模糊。
呵呵···今天就先到这里,以后继续学习!~加把劲哦·