指针方面的题目

 

试题1:

void test1()

{

   char string[10];

   char* str1 = "0123456789";

    strcpy( string, str1 );

}

试题2

void test2()

{

   char string[10], str1[10];

     int i;

     for(i=0; i<10; i++)

     {

        str1[i] = 'a';

     }

     strcpy( string, str1 );

}

试题3

void test3(char* str1)

{

   char string[10];

   if( strlen( str1 ) <= 10 )

     {           

strcpy( string, str1 );

     }

}

 

写一个strcpy函数

//实现链式操作,将目的地址返回

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

{

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

char *address = strDest; 

 while( (*strDest++ = * strSrc++) != /0 );

  return address;

}

 

写一个strcpy函数

int strlen( const char *str )    //入参数const

{

     assert( strt != NULL );    //断言字符串地址非0

     int len;

     while( (*str++) != '/0' )

     { 

            len++;

     }

     return len;

}

 

试题4

void GetMemory( char *p )

{

   p = (char *) malloc( 100 );

}

void Test( void )

{

   char *str = NULL;

   GetMemory( str );

   strcpy( str, "hello world" );

   printf( str );

}

str仍然NULL

试题5

char *GetMemory( void )

{  

     char p[] = "hello world";      

     return p; 

}

void Test( void )

{  

     char *str = NULL; 

     str = GetMemory();   

     printf( str );   

}

p[]组为函数内的局部自动变量,在函数返回后,内存已放。

试题6

void GetMemory( char **p, int num )

{

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

}

void Test( void )

{

     char *str = NULL;

     GetMemory( &str, 100 );

     strcpy( str, "hello" );

     printf( str );

}         

加上:

if ( p == NULL )

{

   ...//行申内存失败处

}

试题7

void Test( void )

{

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

     strcpy( str, "hello" );

     free( str );

     ...  //省略的其它

}

试题7存在与试题6问题,在

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

后未行内存是否申成功的判断;另外,在free(str)后未置str空,致可能成一个“野”指加上:

str = NULL;

 

在看看下面的一段程序有什么错误

swap( int* p1,int* p2 )

{

     int *p;

     *p = *p1;

     *p1 = *p2;

     *p2 = *p;

}

swap函数中,p是一个“野”指,有可能指向系区,致程序运行的崩。在VC++DEBUG运行提示错误Access Violation”。程序应该

swap( int* p1,int* p2 )

{

     int p;

     p = *p1;

     *p1 = *p2;

     *p2 = p;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值