设已有定义:char*st="how are you";,下列程序段中正确的是______。A.char a[11],*p;strcpy(p=a+1,&st[4]);B.char a[11];strcpy (++a,st);C.char a[11];strcpy (a,st);D.char a[], *p;strcpy(p=&a[1],st+2);

题目

设已有定义:char*st="how are you";,下列程序段中正确的是______。

A.char a[11],*p;strcpy(p=a+1,&st[4]);

B.char a[11];strcpy (++a,st);

C.char a[11];strcpy (a,st);

D.char a[], *p;strcpy(p=&a[1],st+2);


相似考题
参考答案和解析
正确答案:A
更多“设已有定义:char*st="how are you";,下列程序段中正确的是______。A.char a[11],*p;strcpy(p=a+1, ”相关问题
  • 第1题:

    若有定义: char *st= "how are you "; ,下列程序段中正确的是A.char a[11], *p; strcpy(p=a+1,&a

    若有定义: char *st= "how are you "; ,下列程序段中正确的是

    A.char a[11], *p; strcpy(p=a+1,&st[4]);

    B.char a[11]; strcpy(++a, st);

    C.char a[11]; strcpy(a, st);

    D.char a[], *p; strcpy(p=&a[1],st+2);


    正确答案:A
    解析:本题综合考查字符数组的赋值和strcpy函数的用法。C语言不允许用赋值表达式对字符数组赋值,如下面的语句就是非法的:str1="China",如果想把"China"这5个字符放到数组str1中,除了逐个输入外,还能使用strcpy函数,该函数的功能是将一个字符串复制到一字符数组中。例如:strcpy(str1,"China")或strcpy(str1,str2);注意,不能企图用以下语句来实行赋值(将str2的值传给str1):str1=str2;不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。
    strcpy函数的结构是:strcpy(字符数组1,字符串2)
    其中,需要注意的是,字符数组1的长度不应小于字符串2的长度,"字符数组1"必须写成数组名形式,如(str1),"字符串2"可以是字符数组名,也可以是字符串常量,不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。

  • 第2题:

    若有定义:char *x="abcdefghi";,以下选项中正确运用了strcpy函数的是______。

    A.char y[10]; strcpy(y,x[4]);

    B.char y[10]; strcpy(++y,&x[1]);

    C.char y[10],*s; strcpy(s=y+5,x);

    D.char y[10],*s; strcpy(s=y+1,x+1);


    正确答案:D
    解析:选项A中x[4]是取字符e,也就是将字符复制到y中,strcpy实现的是地址的复制所以选项A错误;选项B中++y是错误的,不允许对常量进行自加运算(y是—个确定的地址值),所以选项B错误;选项C指针变量s指向了y向后的第5位,则存放x时会出现越界问题,所以选项C错误;选项D中,指针变量s指向了y向后的第—位,此时s可存放数据的长度为9,而地址“x+1”起的字符串的地址长度也刚好为9(包括“\0”),所以开始复制不会出现地址越界问题,故选项D正确。

  • 第3题:

    下列程序段中,不能正确赋值的是( )。

    A.char*p,ch; p=&Ch; scanf("%c",&p);

    B.char*p; p=char*)malloc(1); scanf("%c",p);

    C.char*p; *p=getchar();

    D.char*p,ch; p=&ch; *p=getchar();


    正确答案:C
    解析:地址变量p指向的存储空间一定要明确,否则可能影响程序的正确性。

  • 第4题:

    若有定义: char *st= "how are you "; 下列程序段中正确的是

    A.char a[11], *p; strcpy(p=a+1,&st[4]);

    B.char a[11]; strcpy(++a, st);

    C.char a[11]; strcpy(a, st);

    D.char a[], *p; strcpy(p=&a[1],st+2);


    正确答案:A

  • 第5题:

    下面程序段的运行结果是( )。 char a[]="abcdefgh"; char *p=a; p+=3; printf("%d\n",strlen(strcpy(p,"ABCD")));

    A.8

    B.12

    C.4

    D.7


    正确答案:C
    解析:p被定义为指针型变量,指向字符数组a的首地址。执行p+=3;指针后移3位,指向d。strcpy(p,"ABCD")将字符串"ABCD"(连同'\0')复制到p所指向的地址单元中,strlen()函数计算p所指向的字符串的长度,返回字符串中字符的个数(不计'\0'),返回值为字符串"ABCD"中字符的个数4。

  • 第6题:

    若有定义:char*st="how are you";,下列程序段中正确的是

    A.chara[11],*p;strcpy(p=a+1,&st[4]);

    B.chara[11];strcpy(++a,st);

    C.chara[11];strcpy(a,st);

    D.chara[],*p;strcpy(p=&a[1],st+2);


    正确答案:A
    解析: 本题综合考查字符数组的赋值和strepy函数的用法。C语言不允许用赋值表达式对字符数组赋值,如下面的语句就是非法的:strl=“China”,如果想把“Chi- na”这5个字符放到数组strl中,除了逐个输入外,还能使用strepy函数,该函数的功能是将一个字符串复制到一字符数组中。例如:strepy(strl,“China”)或strcpy(strl,str2);注意,不能企图用以下语句来实行赋值(将str2的值传给strl):str1=str2;不能用赋值语句将一个字符串常量或字符数组直接给一个字

  • 第7题:

    下面程序的输出结果是 include includevoid main( ) { char p1[10] ,p2

    下面程序的输出结果是

    #include<iostream.h>

    #include<string.h>

    void main( )

    {

    char p1[10] ,p2[10] ;

    strcpy(p1,"abc") ;

    strcpy(p2,"ABC") ;

    char str[50] ="xyz";

    strcpy(str+2,strcat(p1,p2) ) ;

    cout < < str;

    }

    A.xyzabcABC

    B.zabcABC

    C.xyabcABC

    D.yzabcABC


    正确答案:C
    解析:该函数的调用方式是strcpy(字符数组,字符串) ,其中“字符串”可以是串常量,也可以是字符数组。函数的功能是将“字符串”完整地复制到“字符数组”中,字符数组中原有内容被覆盖。使用该函数时注意:①字符数组必须定义得足够大,以便容纳复制过来的字符串。复制时,连同结束标志'\0'一起复制。②不能用赋值运算符“=”将一个字符串直接赋值给一个字符数组,只能用strcpy( ) 函数来处理。strcat (字符数组,字符串) 的功能是把“字符串”连接到“字符数组”中的字符串尾端,并存储于“字符数组”中。“字符数组”中原来的结束标志被“字符串”的第一个字符覆盖,而“字符串”在操作中未被修改。使用该函数时注意:①由于没有边界检查,编程者要注意保证“字符数组”定义得足够大,以便容纳连接后的目标字符串;否则,会因长度不够而产生问题。②连接前两个字符串都有结束标志'\0',连接后“字符数组”中存储的字符串的结束标志'\0'被舍弃,只在目标串的最后保留一个'\0'。

  • 第8题:

    设有以下定义: char *st="how are you";下列程序段中正确的是______。

    A.char a[11],*p;strcpy(p=a+1,&st[4]);

    B.char a[11];strcpy(++a,st);

    C.char a[11];strcpy(a,st);

    D.char a[],*p;srtcpy(p=&a[1],st+2);


    正确答案:A
    解析:选项A表示把st所指串的第5个字符开始的后面的元素赋值给数组a的第2个元素开始的后面元素,形式正确;选项B中出现对数组名进行自加运算,因此错误:选项C中st所指字符串有11个字符,再加上'\0',有12个字符,超过数组长度,所以也是错误的;选项D的情况和选项C相似,也是形式正确,但超过了数组的长度。

  • 第9题:

    下面说明不正确的是______。

    A.char a[10]="USA";

    B.char a[10],*p=a;p=a;p="USA";

    C.char*a;a="USA";

    D.char a[10],*p;a=p="USA";


    正确答案:D

  • 第10题:

    下面程序段的运行结果是()。  char *p=“abcdefgh”;  p+=3;  printf(“%d/n”,strlen(strcpy(p,“ABCD”))); 

    • A、4
    • B、7
    • C、8
    • D、12

    正确答案:A

  • 第11题:

    以下与库函数strcpy(char*p1,char*p2)功能不相等的程序段是()

    • A、strcpyl(char*p1,char*p2){while((p1++=p2++)!=’/0’);}
    • B、strcpy2(char*pl,char*p2){while((*p1=*p2)!=’/0’)pl++,p2++;}
    • C、strcpy3(char*pl,char*p2){while((*p1++=*p2++);)
    • D、strcpy4(char*p1,char*p2){whi1e(*p2)*pl++=*p2++;}

    正确答案:D

  • 第12题:

    单选题
    下面程序段的运行结果是()。  char *p=“abcdefgh”;  p+=3;  printf(“%d/n”,strlen(strcpy(p,“ABCD”)));
    A

    4

    B

    7

    C

    8

    D

    12


    正确答案: A
    解析: 暂无解析

  • 第13题:

    下面说明不正确的是

    A.char a[10]="china";

    B.char a[10],*p=a;p="china"

    C.char*a;a="china";

    D.chara[10],*P;P=a="china"


    正确答案:D
    解析: C语言中操作一个字符串常量的方法有:①将字符串常量存放在一个字符数组之中;②用字符指针指向字符串,然后通过字符指针来防问字符串存储区域。当字符串常量在表达式中出现时,根据数组的类型转换规则,将其转换成字符指针。
    本题D)项中错误的关键是对数组初始化时,可以在变量定义时整体赋初值,但不能在赋值语句中整体赋值。

  • 第14题:

    有以下程序 include main() { char p[20]={'a','b','c','d'},q[]="abc",r[]

    有以下程序 #include<string.h> main() { char p[20]={'a','b','c','d'},q[]="abc",r[]="abcde"; strcpy(p+strlen(q),r);strcat(p,q); printf("%d%d\n",sizeof(p),strlen(p)); } 程序运行后的输出结果是

    A.20 9

    B.9 9

    C.20 11

    D.11 11


    正确答案:C
    解析:函数strlen()返回的是数组的实际长度,而sizeof返回的是数组定义的总长度。因为字符数组p[20]定义为20字节长度,所以sizeof(p)的值为 20。“strcpy(p+strlen(q),r);”语句的功能把字符数组 r拷贝到字符数组p从p[3]开始到p[7]的位置中,这时字符数组p的有效字符长度为8。然后再执行"strcat (p,q);”语句(字符串连接),即把字符数组q连接到字符数组p后面,这时字符数组p的有效长度为11。

  • 第15题:

    以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是( )。

    A.char s[10]=="abcdefg";

    B.char t[]="abcdefg",*s=t;

    C.char s[10];s="abcdefg";

    D.char s[10];strcpy(s,"abcdefg");


    正确答案:C
    解析:选项A中定义了一个字符型数组并使用字符串常量给它赋初值,故选项A正确。选项B定义了一个字符型数组t并初始化,然后定义了一个指针变量s并让它指向t,故选项B正确。选项C先定义了一个长度为10的字符型数组,然后再给它赋值,这时应该分别给数组中的每个元素赋值,故选项C不正确;选项D中先定义了一个长度为10的字符型数组s,然后通过字符串复制函数将字符串“abcdefg”赋值给它,选项D正确。所以,4个选项中选项C符合题意。

  • 第16题:

    以下程序的输出结果是()。main(){char*a[][5]={“how”,”do”,”you”,”do”,”!”};char**p;inti;p=a;for(i=0;i<4;i++);printf(“%s”,p[i]);}()

    A.howdoyoudo!

    B.how

    C.howdoyoudo

    D.hdyd


    正确答案:C

  • 第17题:

    有以下程序:includevoid f(char p[][10],int n){char t[10];int i,j;for(i=0;i

    有以下程序: #include<string.h> void f(char p[][10],int n) {char t[10];int i,j; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(strcmp(p[i],p[j])>0) {strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy(p[j],t);} } main() {char p[5][10]={"abc","aabdfg","abbd","dedbe","cd"}; f(p,5); printf("%d\n",strlen(p[0]));} 程序运行后的输出结果是( )。

    A.2

    B.4

    C.6

    D.3


    正确答案:C
    解析:本题考核的是二维字符数组按行存放字符串、二维数组名作为函数的参数以及字符串的排序。主函数中定义了一个二维字符串数组p并按行赋值,调用f()函数,将字符串从小到大排序,strcmp()函数的功能是对两个字符串作向右逐个字符比较,直到出现不同的字符或遇到“\0”为止。如果全部字符都相同,则认为相等;若出现不同的字符.则以第一个不相同的字符的比较结果为准。由此可知最小的字符串是“aabdfg”,排序后存放在p[0]中,最后在主函数中输出p[0]的长度。

  • 第18题:

    下面程序段的运行结果是char *p="abcdefgh";p+=3;printf("%d\n",strlen(strcpy(P,"ABCD"))); A.8 B.12 C.4 D.7


    正确答案:C
    在本题中,程序段首先定义了字符型指针变量p,并使其指向一个字符串,然后将指针变量p加3,即使其指向字符串的第四个元素。然后执行输出语句,通过输出语句的输出格式我们可以知道,最后输出的是一个十进制数的整型数值,其输出列表为strlen(strcpy(P,″ABCD″))。这就要求我们了解strlen函数和strcpy函数的作用。
    strcpy的调用格式是:strcpy(目的地址,源地址),其功能是把源地址的字符串复制到目的地址中,这种复制将覆盖原来的字符串。strcat函数的功能是将源地址的字符串复制到目的地址字符串的后面。
    strlen的调用格式是:strlen(字符串地址),其功能是返回字符串中字符的个数。
    那么程序中执行strcpy(P,″ABCD″)后指针变量p所指向的字符串为“ABCD”,该字符串中字符的个数为4,那么执行strlen后,程序最终输出的结果是4。因此本题正确的答案是C。

  • 第19题:

    以下程序的输出结果是【 14 】

    #include <stdio.h>

    #include <stdio.h>

    #include <stdlib.h>

    #include <string.h>

    main( )

    { char *p,*q,*r,

    p=q=r=(char*)malioc( sizeof(char)*20);

    strcpy(p,"attaboy,welcome!");

    printf(”%c%c%c\n”,p[ 11 ], q[ 3 ],r[ 4 ]);

    free(p);

    }


    正确答案:
    【答案】cab
    【知识点】malloc函数与指针变量的使用
    【解析】pqr三个指针指向同一个具有20个字符空间的地址。Strcpy函数的作用是将字符串attaboy,welcome!复制到p指针所指向的空间。所以打印时打印的p[11], q[3],r[4]分别为c,a,b。

  • 第20题:

    下面程序的输出结果是includeincludevoid main( ){char p1[10],p2[10]s

    下面程序的输出结果是 #include<iostream.h> #include<string.h> void main( ) { char p1[10],p2[10] strcpy(p1,"abc"); strcpy(p2,"ABC"); char str[50]="xyz"; strcpy(str+2,strcat(p1,p2));

    A.xyzabcABC

    B.zabcABC

    C.xyabcABC

    D.yzabcABC


    正确答案:C
    解析:该函数的调用方式是strcpy(字符数组,字符串)其中“字符串”可以是串常量,也可以是字符数组。函数的功能是将“字符串”完整地复制到“字符数组”中,字符数组中原有内容被覆盖。使用该函数时注意:①字符数组必须定义得足够大,以便容纳复制过来的字符串。复制时,连同结束标志'\0'一起复制。②不能用赋值运算符“=”将一个字符串直接赋值给一个字符数组,只能用strcpy()函数来处理。strcat (字符数组,字符串)功能是把“字符串”连接到“字符数组”中的字符串尾端,并存储于“字符数组”中。“字符数组”中原来的结束标志,被“字符串”的第一个字符覆盖,而“字符串”在操作中未被修改。使用该函数时注意:①由于没有边界检查,编程者要注意保证“字符数组”定义得足够大,以便容纳连接后的目标字符串;否则,会因长度不够而产生问题。②连接前两个字符串都有结束标志'\0',连接后“字符数组”中存储的字符串的结束标志'\0'被舍弃,只在目标串的最后保留一个'\0'。

  • 第21题:

    若有定义:char*st=”how are you”;,下列程序段中正确的是( )。A. B. C. SX

    若有定义:char*st=”how are you”;,下列程序段中正确的是( )。

    A.

    B.

    C.

    D.


    正确答案:A
    本题综合考查字符数组的赋值和strcpy函数的用法。C语言不允许用赋值表达式对字符数组赋值,如strcpy函数的结构是:strcpy(字符数组1,字符串2)其中,需要注意的是,字符数组l的长度不应小于字符串2的长度,”字符数组1”必须写成数组名形式,如(strl),”字符串2”可以是字符数组名,也可以是字符串常量,不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。

  • 第22题:

    设已有定义:char*st=”howareyou”;下列程序段中正确的是()。

    • A、chara[11],*p;strcpy(p=a+1,st[4]);
    • B、chara[11];strcpy(++a,st);
    • C、chara[11];strcpy(a,st);
    • D、chara[],*p;strcpy(p=&a[1],st+2)

    正确答案:C

  • 第23题:

    单选题
    有以下程序:#include #include #include main(){ char*p1,*p2; p1=p2=(char*)malloc(sizeof(char)*10); strcpy(p1,malloc); strcpy(p2,p1+1); printf(%c%c, p1[0], p2[0]);}程序的运行结果是(  )。
    A

    aa

    B

    ma

    C

    am

    D

    mm


    正确答案: B
    解析:
    malloc函数的原型为:malloc(size);,函数的作用是在内存的动态存储区申请分配一个长度为size的连续空间。程序执行过程为:定义两个字符类型指针p1和p2,动态开辟10个字符类型的内存单元,并且使指针p1与p2均指向这10个内存单元的第一个单元。调用strcpy函数,将字符串“malloc”赋值给这10个内存单元的前7个单元,存储情况为:malloc\0,此时p1指向10个内存单元的第一个单元。再次调用strcpy函数,这10个内存单元的第2个单元到第7个单元元素重新赋值给p2指向的内存单元以及以后的5个单元,存储情况为:alloc\0\0,此时p1和p2均指向10个内存单元的第一个单元。输出两个指针指向单元的数据值,结果为:aa,答案选择A选项。