niusouti.com
更多“char str[ ]= "Hello";char *p=str;int n=10;sizeof(str)=( )sizeof(p)=( )sizeof(n)=( )void func(char str[100]){ }sizeof(str)=( )”相关问题
  • 第1题:

    有以下程序:includemain(){ char str[][20]={"Hello","Beijing"),*p=str[0];printf("

    有以下程序: #include<string.h> main() { char str[][20]={"Hello","Beijing"),*p=str[0]; printf("%d\n",strlen(p+20)); } 程序运行后的输出结果是( )。

    A.0

    B.5

    C.7

    D.20


    正确答案:C
    解析:主函数中定义了一个二维字符数组并初始化,初始化后的结果为str[0]="Hello"、str[1]="Beijng",然后定义一个字符指针变量p并让它指向str[0],即指向数组的首地址,而在C语言中无论是一维还是多维数组,其元素在内存中都是顺序存放的,故p+20后指针指向str[1],所以strlen(p+20);返回的是str[1]中字符串的长度,即"Beijng"的长度7,故4个选项中选项C符合题意。

  • 第2题:

    下列程序的输出结果是______。 char*fun(char*str,int n) { int i; char*p=str; for(i=0;i<10;i++,str++) *str='a'+i; return++p; } main() { char a[10]; printf("%s\n",fun(a,10)); }

    A.ABCDEFGHIJ

    B.abcdefghij

    C.bcdefghij

    D.不确定的值


    正确答案:C
    解析:调用函数fun使字符数组中的内容是"abcdefghij",函数的返回值是字符数据的地址,该地址指向数组的第二个字符,因此,主函数的输出结果是字符串 "bcdefghij"。

  • 第3题:

    以下函数fun的功能是返回str所指字符串中以形参c中字符开头的后续字符串的首地址,例如,str所指字符串为Hello!,c中的字符为e,则函数返回字符串ello!的首地址。若str所指字符串为空或不包含c中的字符,则函数返回NULL,请填空。char *fun(char *str,char c){ int n=0; char *p=str; if(p!=NULL) while(p[n]!=c&&p[n]!=’\0’) n++; if(p[n]==’\0’) return NULL; return();}


    正确答案:p+n
    在本题中,函数fun的功能是返回str所指字符串中以形参c中字符开头的后续字符串的首地址。
    在本题的程序中,fun函数带有两个形参,其中一个是指针str,它指向字符串的首地址,另一个是字符变量c。程序首先定义了一个整型变量n,从程序中可知,它是字符串str中参数c相对于首地址的偏移量,然后定义了一个指针变量p,指向字符串str的首地址,然后执行条件语句,如果字符串不为空,则执行循环语句,循环结束的条件是要么字符串结束,要么找到形参c中对应的字符。根据循环结束的条件我们可以判断,其非死循环,循环结束后,从程序中可以看出,判断循环结束的原因是否因为字符串结束而结束的,如果是,说明没找到形参c中对应的字符,返回NULL。
    如果不是,则说明是因为找到了形参c中对应的字符而结束循环的。根据题目要求,需要返回以形参c中字符开头的后续字符串的首地址,而这时以形参c中字符开头的后续字符串的首地址为p+n。

  • 第4题:

    下列程序在32位linux或unix中的结果是什么?

    func(char *str)

    {

    printf(" %d",sizeof(str));

    printf(" %d",strlen(str));

    }

    main()

    {

    char a[]="123456789";

    printf(" %d",sizeof(a));

    printf(" %d",strlen(a));

    func(a);

    }


    正确答案:

     

    10 9 4 9

  • 第5题:

    有关内存的思考题

    1. void getmemory(char *p)

    { p=(char*)mallol(100);

    }

    void test(void)

    {

    char * str =null;

    getmemory(str);

    strcpy(str,”hello,world”);

    printf(str);

    }

    请问运行 Test 函数会有什么样的结果


    正确答案:
     

  • 第6题:

    void func(char str[100])

    { }


    正确答案:

     

     

  • 第7题:

    void GetMemory(char *p){p = (char *)malloc(100);}void Test(void) {char *str

    = NULL;GetMemory(str); strcpy(str, "hello world");printf(str);}请问运行 Test 函数

    会有什么样的结果?


    正确答案:
     

  • 第8题:

    Void GetMemory2(char **p, int num){*p = (char *)malloc(num);}void

    Test(void){char *str = NULL;GetMemory(&str, 100);strcpy(str, "hello"); printf(str); }请问

    运行Test 函数会有什么样的结果?


    正确答案:
     

  • 第9题:

    请补充函数fun(),该函数的功能是:把从主函数中输入的字符串str2倒置后接在字符串str1后面。

    例如:str1=“How do”,str2=“?od uoy”,结果输出:“How do you do?”。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

    试题程序:

    include<stdio.h>

    include<conio.h>

    define N 40

    void fun(char *str1,char *str2)

    {

    int i=0,j=0,k=0,n;

    char ch;

    char *p1=str1;

    char *p2=str2;

    while(*(p1+i))

    i++;

    while(*(p2+j))

    j++;

    n=【 】;

    for(;k=j/2;k++,j--)

    {

    ch=*(p2+k);

    *(p2+k)=*(p2+j);

    *(p2+j)=ch;

    }

    【 】;

    for(;【 】;i++)

    *(p1+i)=*p2++;

    *(p1+i)='\0';

    }

    main()

    {

    char str1[N],str2[N];

    int m,n,k;

    clrscr();

    printf("***Input the string str1 & str2

    ***\n");

    printf("\nstr1:");

    gets(str1);

    printf("\nstr2:");

    gets(str2);

    printf("***The string str1 & str2 ***\n");

    puts(str1);

    puts(str2);

    fun(str1,str2);

    printf("*** The new string ***\n");

    puts (str1);

    }


    正确答案:j-- *(p2+n)='\0' *p2
    j-- *(p2+n)='\0' *p2 解析:第一空:while循环执行后,变量j中保存了字符串str2的长度,而后面的for循环是将字符串str2倒置,即将第一个字符与最后一个字符对调,第二个字符与倒数第二个字符对调,如此循环直到中间的字符。第一次执行循环时,*(p2+j)指向最后一个字符,所以j要减1,并将未减1之前的数赋给n。第二空:将字符串str2倒置后,在字符串的最后要加上结束标记符,'\0'。第三空:当*p2所指的字符为,'\0'时,说明已经将倒置后的字符串str2都接在字符串str1后面了,for循环应该结束。当*p2所指的为其他字符时,for循环要继续执行。

  • 第10题:

    有以下程序:includemain(){char str[][20]={"Hello","beijing"},*p=str;ptintf("%\n"

    有以下程序: #include <string.h> main() { char str[][20]={"Hello","beijing"},*p=str; ptintf("%\n",strlen(p+20)); } 程序运行后的输出结果是( )。

    A.0

    B.5

    C.7

    D.20


    正确答案:C
    解析:主函数中定义了一个二维字符数组并初始化,初始化后的结果为str[0]="Hello"、str[1]="Beijing",然后定义一个字符指针变量p并让它指向数组的首地址,即指向str[0],而在C语言中无论是一维还是多维数组,其元素在内存中都是顺序存放的,故p+20后指针指向str[1],所以strlen(p+20);返回的是str[1]中的字符串的长度,即Beijing的长度为7,所以最后输出的值为7,所以,4个选项中选项C符合题意。

  • 第11题:

    单选题
    有如下程序:#include #include main(){ char name[10]=c-book; char *str=name; printf(%d,%d,%d,%d, sizeof(name), strlen(name), sizeof(str), strlen(str));}程序运行后的输出结果是(  )。
    A

    10,6,4,6

    B

    11,6,11,6

    C

    11,6,1,6

    D

    10,7,1,7


    正确答案: B
    解析:
    由一维数组初始化的知识可知,name[10] = "c-book",即name[10]="c-book\0\0\0\0"。sizeof函数用来获取类型或数据对象的长度,也即是一个这种数据类型的变量在内存中所占字节数。strlen函数统计字符串长度,遇到'\0'统计结束。字符指针变量和字符数组在内存中的存储情形不同,数组指的是按照数组长度分配的若干存储空间,在内存中字符类型变量占1个字节;而指针只是一个存储字符串首地址的存储空间,指针占4个字节。所以sizeof(name)=1×10=10,strlen(name)=6,sizeof(str)=4,strlen(str)=6。答案选择A选项。

  • 第12题:

    单选题
    有以下程序:#include #include main(){ char str[]={Hello,Beijing}; printf(%d,%d,strlen(str),sizeof(str));}程序的运行结果是(  )。
    A

    13,13

    B

    13,14

    C

    13,15

    D

    14,15


    正确答案: B
    解析:
    strlen返回字符串的长度,不包含字符串末尾的结束字符'\0',结果为13;sizeof返回字符串所占存储空间的大小,由于字符串最后要加上一个'\0',所以结果为13+1=14。答案选择B选项。

  • 第13题:

    有以下程序: include void f(char *s,char *t) {char k; k=*s; +s=*t;

    有以下程序: #include<string.h> void f(char *s,char *t) {char k; k=*s; +s=*t; *t=k; S++; t--; if(*s) f(s,t); } main() {char.str[10]="abcdefg",*p; p=str+strlen(str) /2+1; f(p,p-2); printf("%s\n",str); } 程序运行后的输出结果是 ______。

    A.abcdefg

    B.gfedcba

    C.gbcdefa

    D.abedcfg


    正确答案:B
    解析:本程序的作是将字符串str倒序。语句“p=str+strlen(str)/2+1;”用于将指针变量p指向e字符所在的存储单元,p-2指向了c字符所在的存储单元,在函数f中将这两个存储单元的内容交换,并使得f函数中指向c字符的指针变量s加1。指向c字符的指针变量t减1,然后继续将s和t指向的存储单元的内容进行交换,直到s指向的存储单元的内容为空为止。所以本题程序输出的结果是字符串“abcdefg”的倒序形式“gfedcba”。

  • 第14题:

    设有结构体类型定义: struct try { int one; float two; }*str;若要动态开辟一个结构单元,使指针str指向其首地址,正确的语句是______。

    A.str=(try*)malloc(sizeof(try));

    B.*str=(struct try*)malloc(sizeof(struct try));

    C.str=(strucy try*)malloc(sizeof(struct try));

    D.str=(struc try)malloc(sizeof(struct try));


    正确答案:C
    解析:由于在ANSIC中malloc函数返回的地址为void,故在调用函数时,必须利用强制类型转换将其转换成所需的类型。

  • 第15题:

    下列程序在32位linux或unix中的结果是什么?

    func(char *str)

    {

    printf("%d",sizeof(str));

    printf("%d",strlen(str));

    }

    main()

    {

    char a[]="123456789";

    printf("%d",sizeof(a));

    func(a);

    }


    正确答案:

     

    10 4 9

  • 第16题:

    void setmemory(char **p, int num)

    { *p=(char *) malloc(num);}

    void test(void)

    { char *str=NULL;

    getmemory(&str,100);

    strcpy(str,"hello");

    printf(str);

    }

    运行test函数有什么结果?( )


    正确答案:
     

  • 第17题:

    char*getmemory(void)

    { char p[]=”hello world”;

    return p;

    }

    void test(void)

    {

    char *str=null;

    str=Getmemory();

    printf(str);

    } 请问运行 Test 函数会有什么样的结果.


    正确答案:
     

  • 第18题:

    以下为 Windows NT 下的 32位 C++程序,请计算 sizeof的值

    char str[] = “Hello” ; char *p = str ;int n = 10;请计算 sizeof (str )

    = sizeof ( p ) = sizeof ( n ) = void Func (

    char str[100]){请计算 sizeof( str ) = }

    void *p = malloc( 100 );请计算 sizeof ( p ) =


    正确答案:
     

  • 第19题:

    char *GetMemory(void){ char p[] = "hello world";return

    p; }void Test(void){char *str = NULL;str = GetMemory(); printf(str);}请问运行 Tes

    t 函数会有什么样的结果?


    正确答案:
     

  • 第20题:

    void Test(void){char *str = (char *)

    malloc(100); strcpy(str, “hello”); free(str); if(str != NULL) { strcpy(str, “

    world”); printf(str);}}请问运行 Test 函数会有什么样的结果?


    正确答案:
     

  • 第21题:

    下面的程序各自独立,请问执行下面的四个TestMemory 函数各有什么样的结果?

    ①void GetMemory(char * p)

    {

    p = (char * )malloc(100);

    }

    void TestMemory (void)

    {

    char *str = NULL;

    GetMemory (str);

    strcpy(str, "hello world");

    prinff(str);

    }

    ② char * GetMemory (void)

    {

    char p[ ] = "hello world";

    return p;

    }

    void TestMemory (void)

    {

    char * str = NULL;

    str = GetMemory( );

    printf(str);

    }

    ③void GetMemory(char * * p, int num)

    {

    * p = (char * )malloc(num);

    }

    void TestMemory (void)

    {

    char * str = NULL;

    GetMemory(&str, 100);

    strcpy( str, "hello" );

    printf(sir);

    }

    ④void TestMemory (void)

    {

    char *str = (char * )malloe(100);

    strepy (str, "hello" );

    free ( str );

    if(str ! = NULL)

    {

    strepy( str, "world" );

    printf(str);

    }

    }


    正确答案:程序1程序崩溃。因为GetMemory并不能传递动态内存TestMemory函数中的str一直都是 NULL。strcpy(str “hello world”);将使程序崩溃。 程序2可能是乱码。因为GetMemory返回的是指向“栈内存”的指针该指针的地址不是 NULL但其原来的内容已经被清除新内容不可知。 程序3能够输出hello但是会发生内存泄漏。 程序4篡改动态内存区的内容后果难以预料非常危险。因为free(str);之后str成为野指针if(str!=NULL)语句不起作用。
    程序1程序崩溃。因为GetMemory并不能传递动态内存,TestMemory函数中的str一直都是 NULL。strcpy(str, “hello world”);将使程序崩溃。 程序2可能是乱码。因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是 NULL,但其原来的内容已经被清除,新内容不可知。 程序3能够输出hello,但是会发生内存泄漏。 程序4篡改动态内存区的内容,后果难以预料,非常危险。因为free(str);之后,str成为野指针,if(str!=NULL)语句不起作用。

  • 第22题:

    有以下程序: include include main() { char str[ ]={"Hello,Beijing"}; printf("%d,%d\n",strlen(str),sizeof(str)); } 程序的运行结果是( )。

    A.13,13

    B.13,14

    C.13,15

    D.14,15


    答案:B
    解析:strlen返回字符串的长度,不包含字符串末尾的结束字符′\0′,结果为13;sizeof返回字符串所占存储空间的大小,由于字符串最后要加上一个′\0′,所以结果为13+1=14。

  • 第23题:

    单选题
    有以下程序:#include #include main(){ char name[9]=c##line; char *str=name;  printf(%d,%d,%d,%d, sizeof(name), strlen(name), sizeof(str), strlen(str)); }程序运行后的输出结果是(  )。
    A

    9,7,4,7

    B

    8,6,9,6

    C

    8,6,3,6

    D

    10,8,5,8


    正确答案: D
    解析:
    由于name是一个长度为9的一维数组,故在内存中占用9字节长度,而其中字符串"c##line"只有7个字符,strlen函数返回的是该字符串的长度,不包含结束符,str是一个指针变量,占用4字节长度,但是由于name首地址赋给了str指针变量,在调用strlen函数时,返回的是指针对应地址单元的字符串的长度7,答案选择A选项。