Strcat,strcpy,strcmp,Strlen函数原型

Strcat,strcpy,strcmp,Strlen函数原型
Strcat,strcpy,strcmp,Strlen函数原型

Strcat,strcpy,strcmp,Strlen函数原型

1、Strcat函数原型如下:

#include

#include

#include

char *strca(char *dst, const char * src)

{

char *dst_t;

dst_t = (char *)malloc(sizeof(dst) + sizeof(src));

char *start = dst_t;

assert(dst && src);

while(*dst_t = *dst)

{

dst_t++; dst++;

}

while(*dst_t = *src)

{

dst_t++; src++;

}

*dst_t = '\0';

return start;

}

下面,贴上一个我自己写的strcpy函数,以做比较;相比之下,我自己写的这个strcpy效率就显得低了。char * my_strcat(char *s, char *t)

{

int i;

char *st, *p_st, *p_s, *p_t;

st = (char *)malloc(strlen(s)+strlen(t)+1);

if(st == NULL)

{

return NULL;

printf("malloc fail!\n");

}

p_st = st;

p_s = s;

p_t = t;

for(i = 0; i < strlen(s); i++)

*(p_st++) = *(p_s++);

for(i = strlen(s); i<(strlen(s) + strlen(t)); i++)

*(p_st++) = *(p_t++);

*p_st = '\0';

return st;

}

int main()

{

char *dst = {"wo ai "};

char *src = {"wo de guo jia !"};

printf("%s\n",strca(dst,src));

return 0;

}

2、Strcpy函数原型如下:

char *strcpy(char *strDest, const char *strScr)

{

char *address=strDest;

assert((strDest != NULL) && (strScr != NULL));

while(*strScr) //是while(*strScr != ’\0’)的简化形式;

{

*strDest++ = *strScr++;

}

*strDest = '\0'; //当strScr字符串长度小于原strDest字符串长度return address; //时,如果没有改语句,就会出错了。

}

以下是在VC6.0中调试的例子,函数名用strcpya代替。

#include

#include

char *strcpya(char *strDest, const char *strScr)

{

char *address = strDest;

assert((strDest != NULL) && (strScr != NULL));

while(*strScr)

{

*strDest++ = *strScr++;

}

*strDest = '\0';

return address;

}

void main()

{

char str1[100]={"i love"};

char str2[50]={"China"};

printf("%s\n",strcpya(str1,str2));

}

3、Strcmp函数原型如下:

int strcmp (const char *str1,const char *str2)

{

int len = 0;

assert((str1 != '\0') && (str2 != '\0'));

while(*str1 && *str2 && (*str1 == *str2))

{

str1++;

str2++;

}

return *str1-*str2;

}

以下是在VC6.0中调试的例子,函数名用strcmpa代替。

#include

#include

int strcmpa (const char *str1,const char *str2)

{

int len = 0;

assert((str1 != '\0') && (str2 != '\0'));

while(*str1 && *str2 && (*str1==*str2))

{

str1++;

str2++;

}

return *str1-*str2;

}

void main()

{

char str1[100] = {"i love"};

char str2[50] = {"China "};

printf("%d\n",strcmpa(str1,str2));

}

4、Strlen函数原型如下:

int strlen(const char *str)

{

int len = 0;

assert(str != NULL);

while(*str++)

{

len++;

}

return len;

}

以下是在VC6.0中调试的例子,函数名用strlena代替。

#include

#include

int strlena(const char *str)

{

int len = 0;

assert(str != NULL); while(*str++)

{

len++;

}

return len;

}

void main()

{

char str1[100] = {"i love"}; char str2[50] = {"China "}; printf("%d\n",strlena(str1));

C字符串处理函数全

strcpy(char destination[], const char source[]); strcpy:将字符串source拷贝到字符串destination中。 strcpy函数应用举例 原型:strcpy(char destination[], const char source[]); 功能:将字符串source拷贝到字符串destination中 例程: #include #include void main(void) { char str1[10] = { "TsinghuaOK"}; char str2[10] = { "Computer"}; cout < #include void main(void) { char str1[10] = { "Tsinghua "}; char str2[10] = { "Computer"}; cout <

strlen,strcat,strcpy,strncpy,strcmp函数的比较

一、s trlen函数 strlen()函数用来计算字符串的长度,其原型为: unsigned int strlen (char *s); 【参数说明】s为指定的字符串。 strlen()用来计算指定的字符串s 的长度,不包括结束字符"\0"。 【返回值】返回字符串s 的字符数。 注意一下字符数组,例如 char str[100] = "https://www.360docs.net/doc/457997477.html,/cpp/u/biaozhunku/"; 定义了一个大小为100的字符数组,但是仅有开始的11个字符被初始化了,剩下的都是0,所以 sizeof(str) 等于100,strlen(str) 等于11。 如果字符的个数等于字符数组的大小,那么strlen()的返回值就无法确定了,例如 char str[6] = "abcxyz"; strlen(str)的返回值将是不确定的。因为str的结尾不是0,strlen()会继续向后检索,直到遇到'\0',而这些区域的内容是不确定的。 注意:strlen() 函数计算的是字符串的实际长度,遇到第一个'\0'结束。 如果你只定义没有给它赋初值,这个结果是不定的,它会从首地址一直找下去,直到遇到'\0'停止。而sizeof返回的是变量声明后所占的内存数,不是实际长度,此外sizeof不是函数,仅仅是一个操作符,strlen()是函数。 二、s trcat函数 strcat() 函数用来连接字符串,其原型为: char *strcat(char *dest, const char *src); 【参数】dest 为目的字符串指针,src 为源字符串指针。 strcat() 会将参数 src 字符串复制到参数 dest 所指的字符串尾部;dest 最后的结束字符 NULL 会被覆盖掉,并在连接后的字符串的尾部再增加一个NULL。 注意:dest 与 src 所指的内存空间不能重叠,且 dest 要有足够的空间来容纳要复制的字符串。

第二章习题-ddg

第二章习题答案 1.给出以下概念的解释说明。 真值机器数数值数据非数值数据无符号整数带符号整数 定点数原码补码变形补码溢出浮点数 尾数阶阶码移码阶码下溢阶码上溢 规格化数左规右规非规格化数机器零非数(NaN) BCD码逻辑数ASCII码汉字输入码汉字内码机器字长 大端方式小端方式最高有效位最高有效字节(MSB) 最低有效位 最低有效字节(LSB) 掩码算术移位逻辑移位0扩展 符号扩展零标志ZF 溢出标志OF 符号标志SF 进位/借位标志CF 2.简单回答下列问题。 (1)为什么计算机内部采用二进制表示信息既然计算机内部所有信息都用二进制表示,为什么还要用到十六进制或八进制数 (2)常用的定点数编码方式有哪几种通常它们各自用来表示什么 (3)为什么现代计算机中大多用补码表示带符号整数 (4)在浮点数的基数和总位数一定的情况下,浮点数的表示范围和精度分别由什么决定两者如何相互制约 (5)为什么要对浮点数进行规格化有哪两种规格化操作 (6)为什么有些计算机中除了用二进制外还用BCD码来表示数值数据 (7)为什么计算机处理汉字时会涉及到不同的编码(如,输入码、内码、字模码)说明这些编码中哪些用二进制编码,哪些不用二进制编码,为什么 3.实现下列各数的转换。 (1)10= ()2= () 8= () 16 (2) 2 = ()10= () 8= () 16= () 8421 (3)(0101 1001 8421 = ()10= () 2= () 16 (4)16 = ()10= () 2 4.假定机器数为8位(1位符号,7位数值),写出下列各二进制数的原码表示。 +,–,+,–,+,–,+0,–0 5.假定机器数为8位(1位符号,7位数值),写出下列各二进制数的补码和移码表示。 +1001,–1001,+1,–1,+10100,–10100,+0,–0 6.已知 [x]补,求x (1)[x]补= (2)[x]补= (3)[x]补=01010010 (4)[x]补= 7.某32位字长的机器中带符号整数用补码表示,浮点数用IEEE 754标准表示,寄存器R1和R2的内容分别为R1:0000108BH,R2:8080108BH。不同指令对寄存器进行不同的操作,因而不同指令执行时寄存器内容对应的真值不同。假定执行下列运算指令时,操作数为寄存器R1和R2的内容,则R1和R2中操作数的真值分别为多少 (1)无符号整数加法指令 (2)带符号整数乘法指令 (3)单精度浮点数减法指令 8.假定机器M的字长为32位,用补码表示带符号整数。表中第一列给出了在机器M上执行的C语言程序中的关系表达式,请参照已有的表栏内容完成表中后三栏内容的填写。 表题8用表

Strcat,strcpy,strcmp,Strlen函数原型

Strcat,strcpy,strcmp,Strlen函数原型 1、Strcat函数原型如下: #include #include #include char *strca(char *dst, const char * src) { char *dst_t; dst_t = (char *)malloc(sizeof(dst) + sizeof(src)); char *start = dst_t; assert(dst && src); while(*dst_t = *dst) { dst_t++; dst++; } while(*dst_t = *src) { dst_t++; src++; } *dst_t = '\0'; return start; } 下面,贴上一个我自己写的strcpy函数,以做比较;相比之下,我自己写的这个strcpy效率就显得低了。char * my_strcat(char *s, char *t) { int i; char *st, *p_st, *p_s, *p_t; st = (char *)malloc(strlen(s)+strlen(t)+1); if(st == NULL) { return NULL; printf("malloc fail!\n"); } p_st = st;

p_s = s; p_t = t; for(i = 0; i < strlen(s); i++) *(p_st++) = *(p_s++); for(i = strlen(s); i<(strlen(s) + strlen(t)); i++) *(p_st++) = *(p_t++); *p_st = '\0'; return st; } int main() { char *dst = {"wo ai "}; char *src = {"wo de guo jia !"}; printf("%s\n",strca(dst,src)); return 0; } 2、Strcpy函数原型如下: char *strcpy(char *strDest, const char *strScr) { char *address=strDest; assert((strDest != NULL) && (strScr != NULL)); while(*strScr) //是while(*strScr != ’\0’)的简化形式; { *strDest++ = *strScr++; } *strDest = '\0'; //当strScr字符串长度小于原strDest字符串长度return address; //时,如果没有改语句,就会出错了。 } 以下是在VC6.0中调试的例子,函数名用strcpya代替。 #include #include

各种字符串处理函数示例(基本)

示例 1.字符串输出示例。 程序: #include void main(void) { char str[25]={"Welcome to our city!"}; puts(str); puts("Thank you!"); } 结果: 2.字符串输入实例。(注意比较gets与scanf和puts与printf的区别)程序: #include void main(main) { char str[20]; gets(str); puts(str); printf("*********\n"); scanf("%s",str); puts(str); } 结果: 3.测字符串长度函数strlen()的使用。 程序: #include #include void main(main) { char a[10]="program";

int x,y; x=strlen(a); y=strlen("abc13"); printf("%d\n%d\n\n",x,y); } 结果: 4.字符串连接函数的使用。 程序: #include #include void main(main) { char s1[20]="Hello",s2[6]="Word"; puts(s1); puts(s2); strcat(s1,s2); printf("%s\n",s1); } 结果: 修改后 程序: #include #include void main(main) { char s1[5]="Hello",s2[6]="Word"; puts(s1); puts(s2); strcat(s1,s2); printf("%s\n",s1); } 结果:

C++常用库函数atoi,itoa,strcpy.strcmp的实现

C++常用库函数atoi,itoa,strcpy.strcmp的实现 1.//整数转换成字符串itoa函数的实现 #include "stdafx.h" 1.//整数转换成字符串itoa函数的实现 #include "stdafx.h" #include using namespace std; void itoaTest(int num,char str[] ) { int sign = num,i = 0,j = 0; char temp[11]; if(sign<0)//判断是否是一个负数 { num = -num; }; do { temp[i] = num%10+'0'; num/=10; i++; }while(num>0); if(sign<0) {

temp[i++] = '-';//对于负数,要加以负号 } temp[i] = '\0'; i--; while(i>=0)//反向操作 { str[j] = temp[i]; j++; i--; } str[j] = '\0'; } 2. //字符串转换成整数atoi函数的实现 int atoiTest(char s[]) { int i = 0,sum = 0,sign; //输入的数前面可能还有空格或制表符应加判断 while(' '==s[i]||'\t'==s[i]) { i++; } sign = ('-'==s[i])?-1:1; if('-'==s[i]||'+'==s[i])

{ i++; } while(s[i]!='\0') { sum = s[i]-'0'+sum*10; i++; } return sign*sum; } 3.//字符串拷贝函数 #include "stdafx.h" #include #include #include using namespace std; char *srcpy(char *dest,const char *source) { assert((dest!=NULL)&&(source!=NULL)); char *address = dest; while(*source!='\0') {

二级c常用函数总结(1)

***************数学相关**************** 1、函数名称: abs 函数原型: int abs(int x); 函数功能: 求整数x的绝对值 函数返回: 计算结果 参数说明: 所属文件: <>,<> 使用范例: #include <> #include <> int main() { int number=-1234; printf("number: %d absolute value: %d",number,abs(number)); return 0; } 2、函数名称: fabs 函数原型: double fabs(double x); 函数功能: 求x的绝对值. 函数返回: 计算结果 参数说明: 所属文件: <> 使用范例: #include <> #include <> int main()

{ float number=; printf("number: %f absolute value: %f",number,fabs(number)); return 0; } 3、函数名称: sqrt 函数原型: double sqrt(double x); 函数功能: 计算x的开平方. 函数返回: 计算结果 参数说明: x>=0 所属文件: <> 使用范例: #include <> #include <> int main() { double x=,result; result=sqrt(x); printf("The square root of %lf is %lf",x,result); return 0; } 4、函数名称: pow 函数原型: double pow(double x,double y); 函数功能: 计算以x为底数的y次幂,即计算x^y的值. 函数返回: 计算结果

sizeof()用法汇总

sizeof()功能:计算数据空间的字节数 1.与strlen()比较 strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素。 而sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示。 2.指针与静态数组的sizeof操作 指针均可看为变量类型的一种。所有指针变量的sizeof 操作结果均为4。 注意:int *p; sizeof(p)=4; 但sizeof(*p)相当于sizeof(int); 对于静态数组,sizeof可直接计算数组大小; 例:int a[10];char b[]="hello"; sizeof(a)等于4*10=40; sizeof(b)等于6; 注意:数组做型参时,数组名称当作指针使用!! void fun(char p[]) {sizeof(p)等于4} 经典问题: double* (*a)[3][6]; cout<

字符串处理函数大全

字符串处理函数大全 bcmp(比较内存内容)相关函数 bcmp,strcasecmp,strcmp,strcoll,strncmp,strncasecmp 表头文件;include 定义函数;int bcmp ( const void *s1,const void * s2,int n); 函数说明;bcmp()用来比较s1和s2所指的内存区间前n个字节,若参数n为0,则返回0。返回值;若参数s1 和s2 所指的内存内容都完全相同则返回0 值,否则返回非零值。 附加说明;建议使用memcmp()取代。 范例:参考memcmp()。 //================================================================ bcopy(拷贝内存内容)相关函数 memccpy,memcpy,memmove,strcpy,ctrncpy 表头文件;#include 定义函数;void bcopy ( const void *src,void *dest ,int n); 函数说明;bcopy()与memcpy()一样都是用来拷贝src所指的内存内容前n个字节到dest所指的地址,不过参数src与dest在传给函数时是相反的位置。 返回值 ;附加说明建议使用memcpy()取代 范例 #include main() { char dest[30]=”string(a)”; char src[30]=”string\0string”; int i; bcopy(src,dest,30);/* src指针放在前*/ printf(bcopy(): “) for(i=0;i<30;i++) printf(“%c”,dest[i]); memcpy(dest src,30); /*dest指针放在钱*/ printf(…\nmemcpy() : “); for(i=0;i<30;i++) printf(“%c”,dest[i]); 执行 bcopy() : string string memcpy() :string sring //================================================================ bzero(将一段内存内容全清为零)相关函数 memset,swab 表头文件;#include 定义函数;void bzero(void *s,int n); 函数说明:bzero()会将参数s所指的内存区域前n个字节,全部设为零值。相当于调用memset((void*)s,0,size_tn); 返回值:附加说明建议使用memset取代

求字符串长度

字符串的长度通常是指字符串中包含字符的数目,但有的时候人们需要的是字符串所占字节的数目。常见的获取字符串长度的方法包括如下几种。 1.使用sizeof获取字符串长度 sizeof的含义很明确,它用以获取字符数组的字节数(当然包括结束符0)。对于ANSI字符串和UNICODE字符串,形式如下: 1.sizeof(cs)/sizeof(char) 2.sizeof(ws)/sizeof(wchar_t) 可以采用类似的方式,获取到其字符的数目。如果遇到MBCS,如"中文ABC",很显然,这种办法就无法奏效了,因为sizeof()并不知道哪个char是半个字符。 2.使用strlen()获取字符串长度 strlen()及wcslen()是标准C++定义的函数,它们分别获取ASCII字符串及宽字符串的长度,如: 1.size_t strlen( const char *string ); 2.size_t wcslen( const wchar_t *string ); strlen()与wcslen()采取0作为字符串的结束符,并返回不包括0在内的字符数目。 3.使用CString::GetLength()获取字符串长度 CStringT继承于CSimpleStringT类,该类具有函数: 1.int GetLength( ) const throw( ); GetLength()返回字符而非字节的数目。比如:CStringW中,"中文ABC"的GetLength()会返回5,而非10。那么对于MBCS呢?同样,它也只能将一个字节当做一个字符,CStringA表示的"中文ABC"的GetLength()则会返回7。 4.使用std::string::size()获取字符串长度 basic_string同样具有获取大小的函数: 1.size_type length( ) const; 2.size_type size( ) const;

strcpy_s strcat_s的用法

strcpy_s、strcat_s的用法 1.前言 已经大约有10年没有写程序了,朋友要求我写一个小程序,就动手写了,用的IDE是visual studio 2012。 写的时候,遇到不少问题,最让我感觉好玩的就是这个strcpy_s和strcat_s 函数的问题,为了节省以后可能碰到这个问题的初学者的时间,把这个事情写下来。 程序写好后,经常报错:Expression: (L”Buffer is too small” && 0),报错图如下: 我在网上查了一些方法,总是解决不了问题,我最后跟踪了一下程序,又到visual studio的网站上看了一下,解决了问题。解决问题的方法如下。

2.用法 2.1.strcpy_s的定义 errno_t strcpy_s(char *strDestination,size_t numberOfElements, const char *strSource ); 2.2.strcpy_s的参数含义 strDestination 目标字符串缓冲区的位置。 numberOfElements 目标字符串缓冲区的大小。 strSource Null 终止的源字符串缓冲区。 注意:第二个参数numberOfElements是目标字符缓冲区的大小,不是本次需要拷贝的字符的多少,我所犯错误就在这里了。strcat_s的参数,也是同样的含义,是要求给出整个目标字符缓冲区的大小,不是本次追加字符的大小。 2.3.strcpy_s的用法 正确用法示例: void main() { char dest[30], source[10]; for(int i=0; i<9;i++) { source[i] ='a'; } source[9]=0; //把最后置为0,标识字符串的结束。 strcpy_s(dest,30, source); //请务必注意此处的第二个参数为目标缓冲区的大小,不可以写上源字符串的长度。 cout<

字符数组和字符串的sizeof( )和strlen()

目录 一、数组或字符串的长度 1、sizeof()---求所占的字节数 (1)、对于整型字符型数组 (2)、对于整型或字符型指针 2、strlen()---字符数组或字符串所占的字节数 (1)、针对字符数组 (2)、针对字符指针 3、sizeof()与strlen()区别 4、c++中的字符串string的长度 一、数组或字符串的长度 1、sizeof()---求所占的字节数 (1)、对于整型字符型数组 int A[]={1,4,5,2,8,6,0}; //求整型数组A所占的字节数 int i=sizeof(A); //i表示整型数组A所占的总空间的字节数 cout<<” i=sizeof(A)= ”<

浙江传媒学院C语言程序设计期终考试A卷

浙江传媒学院《C语言程序设计》期终(考试)(A)卷 2005—2006 学年第二学期任课教师 系班姓名学号得分 一、选择题(共40分,每小题2分) 1、组成C语言程序的是() A、过程 B、函数 C、子程序 D、主程序和子程序 2、下列字符序列中,合法的标识符是() A、S.b,sum,average,_above B、class,day,louts_1,2day C、#md,&12x,momth,student_n1 D、D56,r_1,name,_st_1 3、设n=10,i=4,则赋值运算n%=i+2执行后,n的值为() A、0 B、2 C、4 D、6 4、下述程序的输出结果是() #include void main() { int x=-1,y=3,k; k=x++<=0&&!(y--<=0); printf(“%d,%d,%d”,k,x,y); } A、0,0,3 B、0,1,2 C、1,0,2 D1,1,3 5、执行下面程序中输出语句后, a的值是() void main() { int a; printf("%d\n",(a=4*5,a*4,a+5)); } A、85 B、80 C、25 D、20 6、执行下列程序时输入:1234567,程序的运行结果为() void main() { int x,y; scanf(“%2d%*2c%2d”,&x,&y); printf(“%d\n”,x+y); } A、57 B、68 C、17 D、46 7、为了避免嵌套的条件语句if-else的两义性,C语言规定:else与()配对 A、缩排位置相同的if B、其之前最后的if C、其之后最近的if D、同一行上的if 8、执行下列程序,当输入2时输出的结果是() void main() { int k; scanf(“%d”,&k);

C语言常用函数名及用法

字符函数和字符串函数 头文件:字符串函数头文件:#include 字符函数头文件:#include putchar:输出一个 putchar(a):输出字符变量a的值,(其中a可为字符变量,整形变量,字符常量,整形常量) getchar:输入一个字符 a=getchar(); putchar(a);结果为b printf(格式控制符,输出列表); scanf(格式控制符,地址列表); 输入形式与格式控制部分对应 1.当为两个连续输入时:scanf(“%d%d”,&a,&b); 输入量数据之间可为:一个或多个空格,也可以用enter,tab无逗号时输入时不能用逗号作分隔。 2.格式控制中两%d有两个空格,输入时两数据间应有两个空格或两个以上。 3.当为“:”时输入时应对应一样,当为:scanf(“a=%d,b=%d”,&a,&b);输入a=12,b=22。 4.当格式控制符为%c时,输入时空格与转义字符都作为有效字符记录在里面:scanf(“%c%c%c”,&a,&b,&c); 输入时:ab c↙空间不能插空格或其他符

5. Scanf(“%d%c%f”,&a,&b,&c); 输入时1234a123h26↙在输入遇到时空格回车 tab或其他非法输入就会认定输入完毕 Gets (字符数组):读入字符串函数 Gets(str)从键盘键入a b↙括号里为字符数组str的起始地址,Puts(字符数组):输出字符串函数 Strcat(字符数组1,字符数组2):字符串连接函数(2连接在1后面) Strcpy和strncpy:字符串复制函数 Strcpy(字符数组1,字符数组2):将2复制到1 数组1 要为数组名,字符串2可以为数组名或者字符串 Strncpy(str1,str2,2):将str2的前两个字符复制到str1,取代str1的前两个字符 Strcmp:字符串比较函数 Strcmp(str1,str2):相等则为0(对字符串自左向右逐个字母进行比较) Strlen(字符数组):测字符串的实际长度 Strlwr(字符串)将字符串转换为大写 Strupr(字符串)将字符串转换为小写

C语言中的sizeof的理解

C语言中的sizeof的理解。。 一、sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。 二、sizeof的使用方法 1、用于数据类型sizeof使用形式:sizeof(type) 数据类型必须用括号括住。如sizeof(int)。 2、用于变量sizeof使用形式:sizeof(var_name)或sizeof var_name 变量名可以不用括号括住。如sizeof(var_name),sizeof var_name等都是正确形式。带括号的用法更普遍,大多数程序员采用这种形式。 注意:sizeof操作符不能用于函数类型,不完全类型或位字段。不完全类型指具有未知存储大小的数据类型,如未知存储大小的数组类型、未知内容的结构或联合类型、void类型等。 如sizeof(max)若此时变量max定义为int max(),sizeof(char_v)若此时char_v定义为char char_v[MAX]且MAX未知,sizeof(void)都不是正确形式。 三、sizeof的结果 sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。 1、若操作数具有类型char、unsigned char或signed char,其结果等于1。 ANSI C正式规定字符类型为1字节。 2、int、unsigned int、short int、unsigned short、long int、unsigned long、float、double、long double类型的sizeof在ANSI C中没有具体规定,大小依赖于实现,一般可能分别为2、2、2、2、4、4、4、8、10。 3、当操作数是指针时,sizeof依赖于编译器。例如Microsoft C/C++7.0中,near类指针字节数为2,far、huge类指针字节数为4。一般Unix的指针字节数为4。 4、当操作数具有数组类型时,其结果是数组的总字节数。 5、共用体类型操作数的sizeof是其最大字节成员的字节数。结构类型操作数的sizeof 是这种类型对象的总字节数。 让我们看如下结构: struct{char b;double x;}a; 在某些机器上sizeof(a)=12,而一般sizeof(char)+sizeof(double)=9。 这是因为编译器在考虑对齐问题时,在结构中插入空位以控制各成员对象的地址对齐。如double类型的结构成员x要放在被4整除的地址。 6、如果操作数是函数中的数组形参或函数类型的形参,sizeof给出其指针的大小。 四、sizeof与其他操作符的关系 sizeof的优先级为2级,比/、%等3级运算符优先级高。它可以与其他操作符一起组成表达式。如i*sizeof(int);其中i为int类型变量。 五、sizeof的主要用途 1、sizeof操作符的一个主要用途是与存储分配和I/O系统那样的例程进行通信。例如: void*malloc(size_t size), size_t fread(void*ptr, size_t size, size_t nmemb, FILE*stream)。 2、sizeof的另一个的主要用途是计算数组中元素的个数。例如: void*memset(void*s, int c, sizeof(s))。

strcmp()函数的使用问题

使用strcmp()函数时常出现的问题 原型:int strcmp(char *str1,char *str2) 功能:把两字符串str1与str2进行比较,当str1>str2,函数返回1,当str1==str2时,函数返回0,当str1 #include #include int main() { printf("a与b的比较的结果:%d\n",strcmp("a","b")); printf("b与a的比较的结果:%d\n",strcmp("b","a")); printf("a与a的比较的结果:%d\n",strcmp("a","a")); return 0; } 执行结果: 功能相符。 2)问题引入 首先我们来看如下的编程 #include #include

#include int main() { char str1[2],str2[2]; printf("请输入第一个字符串:"); scanf("%s",str1); printf("请输入第二个字符串:") scanf("%s",str2); printf("%d",strcmp(str1,str2)); return 0; } 我们执行上程序如下: 你们看到没,结果是-1,这本来是等于0啊,可以为什么等于-1?现在我来解答这个疑问。你们看来str1与str2我给它们分配几个字符?对,我只给它们都只分配了两个字符,也就是说它们都是大小为2的字符数组。我们再去看一下程序,我们输入str1与str2是以什么样的方式进行输入的?对,它们都是以字符串的形式进行输入的。而我以前说过,你输入一个字符串,字符串是以’\0’作为结束标记的。假如你是从键盘输入字符串,当你以enter键来结束一个字符输入时,程序会在你输入的字符串中自动输入一个‘\0’。也就是说,字符串结束一定包括一个字符串结束符’\0’,’\0’也占一个字符。现在我们回过来看,strcmp函数是比较两字符串吧,从我们刚才的那种输入的方式,我实际输入的两字符是:str1=”ab\0”,str2=”ab\0”。两个字符都超出了我们给它们的分配的大小。于是这就是出现上面的情况的原因,错误的比较啊,同志们明白了吧。如果还不明白,我们来看下面的一个例子,程序的代码还是上明的代码。只是我们改变一下输入。

strcat和strcpy函数

长沙市中等职业业备课用纸

puts(st1); } 结果: 本程序把初始化赋值的字符数组st1与动态赋值的字符串st2连接起来。 连接前后的状态: 4、使用strcat函数还应注意: 字符数组1应定义足够的长度,否则不能全部装入被连接的字符串。 (二)、字符串复制函数strcpy 1、格式:strcpy (字符数组名1,字符数组名2) 2、功能:把字符数组2中的字符串复制到字符数组1中。串结束标志“\0”也一同复制。字符数组名2,也可以是一个字符串常量。这时相当于把一个字符串赋予一个字符数组。 3、例:写出下列程序的功能: #include"string.h" main() { char st1[20]="012345678901234",st2[]="C Language";

strcpy(st1,st2); puts(st1);printf("\n"); } 结果: 复制前后的状态: 4、使用strcpy函数还应注意: ①字符数组1应定义足够的长度,否则不能全部装入被连接的字符串。 ②结束标志“\0”也一同复制。 ③字符数组名2,也可以是一个字符串常量。相当于把一个字符串赋予一个字符数组。 ④不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。如下面两行都是不合法的: str1=″China″; str1=str2; 而只能用strcpy函数将一个字符串复制到另一个字符数组中去。 三、课堂练习:写出下列程序运行的结果 #include main() {int i;

char a[]="Time",b[]="Tom"; for(i=0;a[i]!='\0'&&b[i]!='\0';i++) if(a[i]==b[i]) if(a[i]>='a'&&b[i]<='z') printf("%c",a[i]-32); else printf("%c",a[i]+32); else printf("*"); } 结果: 2、练习:设计程序,实现strcpy函数的功能 #include main() { int i=0; char str1[100],str2[100]; printf("String1:"); gets(str1); printf("String2:"); gets(str2); while(str2[i]!='\0') {str1[i]=str2[i]; i=i+1;} str1[i]='\0';/*给str1打上新的结束标志*/ printf("str1=%s,str2=%s\n",str1,str2); } 结果:

OC常用函数

常用字符串函数 /************************************* ************************************* ***** 一.NSString ************************************* ************************************* *****/ /*----------------创建字符串的方法 ----------------*/ //1、创建常量字符串。NSString *astring = @"Welcome to 1000phone"; //2、通过实例化方法initWithString:实例化一个字符串对象 NSString *astring = [[NSString alloc] initWithString:@" I love iOS!"]; NSLog(@"astring:%@",astring);?[astring release]; //3、用标准c创建字符串: initWithCString:encoding:方法 const char *cString = "I love iphone";

NSString * aString = [[NSString alloc]initWithCString:cString encoding:NSUTF8StringEncoding];? NSLog(@"astring:%@",aString);?[aString release]; 或者:用initWithUTF8String:实例化一个字符串对象const char *p = " Welcome to Beijing!";?NSString *string = [[NSString alloc]initWithUTF8String:p]; //4、创建格式化字符串:占位符(由一个%加一个字符组成) int age = 23;?NSString *astring = [[NSString alloc] initWithFormat:@”I am %d”,age]]; NSLog(@"astring:%@",astring);?[astring release]; //5、通过静态方法创建字符串对象NSString * str1 = [NSString stringWithString:@"I love programming!"];?NSString * str2 = [NSString stringWithUTF8String:" I love programming!"]; NSString * str3 = [NSString

相关文档
最新文档