2009-3-3 by hayabusa
这两天一直在写C代码,也忘了把东西粘上来,顺便把写得函数发上来吧.
1.讲义
1.1
1.1.1常指针与指针常量
const int* p;*p不能变
int* const p;p不能变
1.1.2数组
1.1.3字符串
字符串的所有处理都要仔细分析,
并且对于内存泄漏问题要相当地关注。
strcat
strlen
str_upp
str_low
list
1.1.4struct
1.2
stack:局部变量
静态存储区:全局变量,static变量
heap 堆:自己创建,自己销毁
malloc
free
注意自己释放的同时取消指针的指向。
void f(char** str){
*str=(char*)malloc(10*sizeof(char));
printf("%s",*str);
}
int main(void){
char *p;
f(&p);
return 0;
}
2.作业
2.1 把前边练习的结果改成Hello World
//output.c
//这里要注意的是常量存储在常量存储区内,也是在程序结束是由系统回收。
#include<stdio.h>
char* show(void){
printf("file:output.c-------functionshow: ");
return "Hello World";
}
//test.c
#include "output.c"
int main(void){
char *p=show();
printf("%s\n",p);
return 0;
}
2.2 统计给定字符串中的数字、字母、空格和其它字符出现的次数
#include<stdio.h>
int main(void){
char string[]="abckdksslaeksdfj&283sdf413asdf4~ L LA ^*@^#&!";
char* p=string;
int num=0,character=0,other=0,space=0;
while(*p){
if(*p == ' ')space++;
else if(*p>='0' && *p<='9')num++;
else if((*p>='A' && *p<='Z')||(*p>='a' && *p<='z'))character++;
else other++;
p++;
}
printf("number-character-space-other:%d-%d-%d-%d\n",num,character,space,other);
return 0;
}
2.3 编写函数实现计算字符串长度的功能
/*
* caculate the length of a string
*/
int str_len(const char *string){
int i=0;
while(*(string+i))i++;
return i-1;
}
2.4 编写函数实现字符串合并的功能。两个输入字符串作为参数,返回合并后的结果。(内存泄露问题,怎么解决)
笨啦,后边两种不能解决内存泄漏啊;而且感觉多余一套。看了codesearch上的代码,都觉得脸红啊,算啦,贴上吧,就当是教训了。
/*
* concatenate two strings
*/
char* str_cat(char* org_str,const char* ext_str){
char* const p;
int org_len=str_len(org_str);
while(*((org_str++)+org_len)=*ext_str++);
return p;
}
/* concatenate two strings
* size represent that it will use at almost n characters
*/
char* str_ncat(char *org_str,const char *ext_str,int size){
char* const p=org_str;
int org_len=str_len(org_str);
int i=0;
while((*((org_str++)+org_len)=*ext_str++)&&(++i)<size);
if(i>=size)*(org_str+org_len)='\0';
return p;
}
/*
* concatenate two strings by accessing memory safely.
* if the orginal string is an array,only bite off the more
* characters of the extended string;but the orginal string
* is a char point,renew a block of memory for the orginal,
* that can hold all the characters of these two strings.
*/
char* str_cata(char *org_str,const char *ext_str,int length){
char* const p=org_str;
int i=str_len(org_str);
while((*(org_str+i)=*ext_str++)&&(++i)<length-1);
*(org_str+i)='\0';
return p;
}
char* str_cats(char** org_str,const char *ext_str,int length){
int org_len=str_len(*org_str);
int ext_len=str_len(ext_str);
if(org_len+ext_len>length-1){
if(!(*org_str=realloc(*org_str,(org_len+ext_len+1)*sizeof(char))))
exit(OVERFLOW);
length=org_len+ext_len+1;
}
char* const p=*org_str;
char* q=*org_str+org_len;
while(*q++=*ext_str++);
return p;
}
2.5 编写函数实现字符串拷贝功能
char* str_cpy(char* org_str,char* ext_str){
char* const p=org_str;
while(*org_str++=*ext_str++);
return p;
}
关键的是3-5题
分享到:
相关推荐
FANUC C Language Executor
C Language Reference Manual
MISRA-C-:2004 Guidelines for the use of the C language in critical systems中文版
MISRA C 2012 Guidelines for the use of the C language in critical systems March 2013
C Language c语言资料
《MISRA C2012 Guidelines for the use of the C language in critical systems》 from www.misra.org.uk
这是很好的c语言的编译环境,希望大家和大家分享下,祝大家开心!
第三代MISRA C规范,汽车工业软件可靠性联会 软件规范 第三版(The Motor Industry Software Reliability Association)
ARM C语言扩展,使C/C++程序员开发ARM架构
C language program test
C Language Tutorial Original MS-DOS tutorial byGordon Dodrill, Coronado Enterprises. Moved to Applix by Tim WardTyped by Karen Ward C programs converted byTim Ward and Mark Harveywith ...
c语言之父DMR写的,当然还是静下心来看英文的好 静下心来,里面还讲了binsearch, shell sort, quick sort, 还有下降递归词法分析,有fopen, malloc, free的底层实现, 真的是牛啊
C Language Template Library C语言 模板库.zip
指针是C的灵魂吧,掌握好指针,就能掌握一切。
PAT OJ exercises in C language 纯C语言题解
c语言、代码、doc、word、C语言源代码学习(C Language)
ARM C 扩展的编译支持文档,值得参考,对于程序优化的人员来说,必看文档。
The C programming language.txt格式