`
xiaoheliushuiya
  • 浏览: 400210 次
文章分类
社区版块
存档分类
最新评论

Java程序员要知道的C/C++函数

 
阅读更多

做为一名Java程序员,为了能顺利得到offer,不得不掌握C和C++的一些基础知识,以防止寻职时笔试被送。如下介绍了一些常用的C、C++函数,希望对各位有用。

(1)

函数原型:extern char strstr(char *haystack,char *needle);

用法:#include<string.h>

功能:从字符串haystack中寻找needle第一次出现的位置(不比较结束符NULL)返回指向第一次出现needle位置的指针,如果没有找到则返回NULL。
(2)
函数原型:extern float pow(float x, float y);
用法:#include<string.h>
功能:x应该大于0,返回幂指数的结果

 printf("%f",pow(3,3));// 必须使用%f,使用%d不允许
 printf("%f",pow(-3,-3));//在自己实现的时候必须要考虑到正负数的情况
(3)
函数原型:const char *c_str();
功能:c_str()函数返回一个指向正规C语言字符串的指针
    string s="ssss";
    printf("%s",s.c_str());
(4)
函数原型:gets(char *str)
说明:从stdin流中读取字符串,直至接受到换行符(换行符好像并不能退出)或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。
int main(){
    char str[101];
    gets(str);// 按行进行参数的获取
    //cout<<str<<"\n";也可以这样为数组赋值
    printf("%s\b",str);
    return 0;
}
(5)
函数原型:char * strncpy(char *dest, char *src,size_t num);
功能:将字符串src中最多num个字符复制到字符数组dest中(它并不像strcpy一样遇到NULL才停止复制,而是等凑够num个字符才开始复制),返回指向dest的指针。
注意:
如果num > dest串长度,dest栈空间溢出产生崩溃异常。否则:
1)src串长度<=dest串长度,(这里的串长度包含串尾NULL字符)
  • 如果num =(0, src串长度),src的前num个字符复制到dest中。但是由于没有NULL字符,所以直接访问dest串会发生栈溢出的异常情况。
  • 如果num= src串长度,与strcpy一致。
  • 如果num = dest串长度,[0,src串长度]处存放于desk字串,(src串长度, dest串长度]处存放NULL。
2)src串长度>dest串长度
如果num =dest串长度,则dest串没有NULL字符,会导致输出会有乱码。如果不考虑src串复制完整性,可以将dest最后一字符置为NULL。
  综上,一般情况下,使用strncpy时,建议将num置为dest串长度(除非你将多个src串都复制到dest数组,并且从dest尾部反向操作),复制完毕后,为保险起见,将dest串最后一字符置NULL,避免发生在第2)种情况下的输出乱码问题。所以,无论是strcpy还是strncpy,保证src串长度<dest串长度才是最重要的。
再来看一个类似的函数:
函数原型:char *strcpy(char *dest, char *src);
功能:把src所指由'\0'结束的字符串复制到dest所指的数组中。src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。最后返回指向dest的指针。
注意:当src串长度>dest串长度时,程序仍会将整个src串复制到dest区域,可是dest数组已发生溢出。因此会导致dest栈空间溢出以致产生崩溃异常。如果不考虑src串的完整性,可以把dest数组最后一元素置为NULL,从dest串长度处插入NULL截取字串。
Strcpy和Strncpy正确使用示例:
char* p="how are you ?";
char name[20]="ABCDEFGHIJKLMNOPQRS";
strcpy(name,p); //name改变为"how are you ? "
strncpy(name,p, sizeof(name));//name改变为"how are you ?" 后续的字符将置为NULL
可以看到,在使用strncpy()函数时,最后一个参数取的是目标串的长度。
如果拷贝的串的长度大于目标串长度时,两者的处理方式:
 char* p="how are you ?";
    char name[10];
    strcpy(name,p); //目标串长度小于源串,错误!
    name[sizeof(name)-1]='\0'; //和上一步组合,弥补结果,但是这种做法并不可取,因为上一步出错处理方式并不确定
    strncpy(name,p,sizeof(name)); //源串长度大于指定拷贝的长度sizeof(name),注意在这种情况下不会自动在目标串后面加'\0'
    name[sizeof(name)-1]='\0'; //和上一步组合,弥补结果

(6)
函数原型:void *memset(void *s, int ch, size_t n);
功能:将s中前n个字节 (typedef unsigned int size_t)用 ch 替换并返回 s 。
在使用之前,C中引入string.h,而C++中引入cstring
(7)
函数原型:FILE * fopen(const char * path,const char * mode);
说明:参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。
mode最常见的参数就是r,表示只读方式打开文件,该文件必须存在。
(8)
函数原型:int fclose(FILE *stream);
说明:关闭一个流。
注意:使用fclose()函数就可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区。
#include <stdio.h>
void main(){
    FILE *fp;
    int i,a[2];
    fp=fopen("C:\\text.txt","r");

    for(i=0;i<2;i++){
        fscanf(fp,"%d",&a[i]);
    }
    for(i=0;i<2;i++){
       printf("%d",a[i]);
    }
    fclose(fp);
    return ;
}

如上的例子演示了如何从文件中读入参数为数组赋值的例子。这样就可以将大量的测试参数写到文本中,以方便读取。

上面是一个一维数组赋值的例子,下面来看一个二维的:

 FILE *fp;
    fp=fopen("C:\\text.txt","r");
    int i,j;
    for(i=1; i<=4; i++){
        for(j=1; j<=4; j++){
            fscanf(fp,"%d",&b[i][j]);
            printf("%d\n",b[i][j]);
        }
    }
    printf("%d ",b[1][2]);
    fclose(fp);
    return 0;

(9)

函数原型:extern int strcmp(const char *s1,const char * s2);

功能:比较两个字符串的大小

说明:

  当s1<s2时,返回值<0

  当s1=s2时,返回值=0

  当s1>s2时,返回值>0

  即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。如:

  "A"<"B" "a">"A" "computer">"compare"

注意:strcmp(const char *s1,const char * s2)这里面只能比较字符串,不能比较数字等其他形式的参数





分享到:
评论

相关推荐

    C/C++中文参考手册离线最新版

    C/C++中文参考手册(C++23标准) 离线chm最新版是一份详尽的C++23标准参考手册,适用于C++程序员和开发人员。该手册提供了全面的C++23标准库和语言特性的介绍,包括语法、关键字、数据类型、控制结构、函数、指针、类...

    C/C++自动提示下行代码函数,类

    这个一款自动提示工具,适合VC6.0,VS全部,是现在软件公司程序员主流插件!

    javaparser:基于函数式组合子逻辑的JAVA语言分析框架

    如果你是一个老牌的c++/java程序员,那么这里还要稍微解释一下。当然如果您对这些虚头八脑的名词不感兴趣,那么,你尽可以跳过这一章,不知道什么是“函数式”,并不会影响你对这个库的理解的。 C++这几年随着gp的...

    C语言和C++的重要知识点提炼.rar

    与C++、Java相比,C语言其实很简单,但却非常重要。因为它是C++、Java的基础。不把C语言基础打扎实,很难成为程序员高手。 1、C语言的结构 先通过一个简单的例子,把C语言的基础打牢。 C语言的结构要掌握以下几点...

    C/C++常用算法手册.秦姣华(有详细书签).rar

    》主要定位于有一定C/C++语言编程基础、想通过学习算法与数据结构提升编程水平的读者,也可作为具有一定编程经验的程序员以及大中专院校学生学习数据结构和算法的参考书。 第1篇 算法基础篇 1 第1章 算法概述 2 ...

    《Java联想(中文)》

    应已知道程序是一系列语句的集合,知道子程序/函数/宏是什么,知道象“If”这样的控制语句,也知道象“while”这样的循环结构。注意这些东西在大量语言里都是类似的。假如您学过一种宏语言,或者用过Perl之类的...

    Java初学者入门教学

    应已知道程序是一系列语句的集合,知道子程序/函数/宏是什么,知道象“If”这样的控制语句,也知道象“while”这样的循环结构。注意这些东西在大量语言里都是类似的。假如您学过一种宏语言,或者用过Perl之类的...

    Thinking_in_java

    本书假定读者对编程多少有些熟悉。应已知道程序是一系列语句的集合,知道子程序/ ...C/C++程序员在阅读时能占到更多的便宜。但即使不熟悉C,一样不要把自己排除在外(尽 管以后的学习要付出更大的努力)。

    一个C++程序员的学习经历

    (我只会C/C++,略懂VB和Java,所以对于通过其他语言来切入VC的没有体验,不置评论)1.必须对C/C++非常熟悉如果C不熟,可以看清华谭浩强的书,经典之作。(学习时间1到2个月,对函数、指针和链表须滚瓜烂熟)

    浅谈CC++内存泄漏及其检测工具

    浅谈C/C++内存泄漏及其检测工具2006-04-03 09:00 作者: 出处: 温馨小屋 责任编辑:&gt;方舟 对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问题。已经有许多技术被研究出来以应对这个问题,比如Smart...

    C#教学PPT,c#从入门到精通第四版

    C#使得C++程序员可以高效的开发程序,且因可调用由 C/C++ 编写的本机原生函数,因此绝不损失C/C++原有的强大的功能。因为这种继承关系,C#与C/C++具有极大的相似性,熟悉类似语言的开发者可以很快的转向C#。 [2]

    Java语言程序设计的课程设计项目——利用Java实现地球系动画完整实现实例(第3部分).pdf

    3) Java 中的数组跟 C/C++这些语言中的数组的语法结构很相似, 但是 Java 去掉了 C/C++ 中的可以使用指针来访问元素的功能。 注意: 1) 数组类是一个空类(自身没有声明任何成员变量、成员方法、构造函数和 ...

    Visual Assist X 10.7.1940.0(5.30更新版)

    Visual Assist X 是一款非常好的 Visual Studio插件,支持 C/C++、C#、ASP、Visual Basic、Java 和 HTML 等语言,能自动识别各种关键字、系统函数、成员变量、自动给出输入提示、自动更正大小写错误、自动标示错误等...

    Source Insight3.5

    Source Insight是一个功能强劲的程序编辑器,他内置对C/C++,Java和x86汇编语言程序的解析;有自己的动态数据库在你编程时提供有用的文本提示,包括有关的函数,宏,参数等 如今最好用的语言编辑器,支持几乎所有的...

    Source Insight

    Source Insight是一个功能强劲的程序编辑器,他内置对C/C++,Java和x86汇编语言程序的解析;有自己的动态数据库在你编程时提供有用的文本提示,包括有关的函数,宏,参数等。如今最好用的语言编辑器,支持几乎所有的...

    C++入门经典(第3版)+源代码

    Ivor Horton还著有Beginning Visual C++6、Beginning C Programming和Beginning Java2 等多部入门级好书。 李予敏,男,计算机科学及应用专业博士,某研究院高级研究员,拥有丰富的C、C++编程经验,在核心期刊、...

    Effective C++ 中文版

     ·洞察 C++和其他语言(例如Java、C#、C)之间的不同。此举有助于那些来自其他语言阵营的开发人员消化吸收 C++ 式的各种解法。 目录: 译序 中英简繁术语对照 目录 序言 致谢 导读 1.让自己习惯C++ ...

Global site tag (gtag.js) - Google Analytics