<delect id="sj01t"></delect>
  1. <em id="sj01t"><label id="sj01t"></label></em>
  2. <div id="sj01t"></div>
    1. <em id="sj01t"></em>

            <div id="sj01t"></div>

            人鴨共譜和諧曲作文

            時間:2025-10-19 14:30:39 和諧 我要投稿

            人鴨共譜和諧曲作文

              試題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 );

              }

              }

              試題1字符串str1需要11個字節才能存放下(包括末尾的’\0’),而string只有10個字節的空間,strcpy會導致數組越界;

              對試題2,如果面試者指出字符數組str1不能在數組內結束可以給3分;如果面試者指出strcpy(string, str1)調用使得從str1內存起復制到string內存起所復制的字節數具有不確定性可以給7分,在此基礎上指出庫函數strcpy工作方式的給10分;

              對試題3,if(strlen(str1) <= 10)應改為if(strlen(str1) < 10),因為strlen的結果未統計’\0’所占用的1個字節。

              剖析:

              考查對基本功的掌握:

              (1)字符串以’\0’結尾;

              (2)對數組越界把握的敏感度;

              (3)庫函數strcpy的工作方式,如果編寫一個標準strcpy函數的總分值為10,下面給出幾個不同得分的答案:

              2分

              void strcpy( char *strDest, char *strSrc )

              {

              while( (*strDest++ = * strSrc++) != ‘\0’ );

              }

              4分

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

              /pic/p>

              {

              while( (*strDest++ = * strSrc++) != ‘\0’ );

              }

              7分

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

              {

              /pic/p>

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

              while( (*strDest++ = * strSrc++) != ‘\0’ );

              }

              10分

              /pic/p>

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

              {

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

              char *address = strDest;

              while( (*strDest++ = * strSrc++) != ‘\0’ );

              return address;

              }

              從2分到10分的幾個答案我們可以清楚的看到,小小的strcpy竟然暗藏著這么多玄機,真不是蓋的!需要多么扎實的基本功才能寫一個完美的strcpy啊!

              (4)對strlen的掌握,它沒有包括字符串末尾的’\0′。

              讀者看了不同分值的strcpy版本,應該也可以寫出一個10分的strlen函數了,完美的版本為: int strlen( const char *str ) /pic/p>

              {

              assert( strt != NULL ); /pic/p>

              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 );

              }

              試題5:

              char *GetMemory( void )

              {

              char p[] = “hello world”;

              return p;

              }

              void Test( void )

              {

              char *str = NULL;

              str = GetMemory();

              printf( str );

              }

              試題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 );

              }

              試題7:

              void Test( void )

              {

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

              strcpy( str, “hello” );

              free( str );

              … /pic/p>

              }

              解答:

              試題4傳入中GetMemory( char *p )函數的形參為字符串指針,在函數內部修改形參并不能真正的改變傳入形參的值,執行完

              char *str = NULL;

              GetMemory( str );

              后的str仍然為NULL;

              試題5中

              char p[] = “hello world”;

              return p;

              的p[]數組為函數內的局部自動變量,在函數返回后,內存已經被釋放。這是許多程序員常犯的錯誤,其根源在于不理解變量的生存期。

              試題6的GetMemory避免了試題4的問題,傳入GetMemory的參數為字符串指針的指針,但是在GetMemory中執行申請內存及賦值語句

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

              后未判斷內存是否申請成功,應加上:

              if ( *p == NULL )

              {

              …/pic/p>

              }

              試題7存在與試題6同樣的問題,在執行

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

              后未進行內存是否申請成功的判斷;另外,在free(str)后未置str為空,導致可能變成一個“野”指針,應加上:

              str = NULL;

              試題6的Test函數中也未對malloc的內存進行釋放。

              剖析:

              試題4~7考查面試者對內存操作的理解程度,基本功扎實的面試者一般都能正確的回答其中50~60的錯誤。但是要完全解答正確,卻也絕非易事。

              對內存操作的考查主要集中在:

              (1)指針的理解;

              (2)變量的生存期及作用范圍;

              (3)良好的動態內存申請和釋放習慣。

              再看看下面的一段程序有什么錯誤:

              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;

              }

            【人鴨共譜和諧曲作文】相關文章:

            和諧曲作文06-23

            共譜和諧校園的樂章作文800字(通用17篇)10-30

            人鴨情未了的作文12-17

            和諧的作文(共8篇)01-12

            和諧的作文【共6篇】01-03

            和諧的作文共8篇05-01

            和諧的作文[共5篇]11-18

            和諧的作文[共9篇]03-09

            和諧的作文【共5篇】03-19

            和諧的作文【共10篇】07-04

            • 相關推薦
            <delect id="sj01t"></delect>
            1. <em id="sj01t"><label id="sj01t"></label></em>
            2. <div id="sj01t"></div>
              1. <em id="sj01t"></em>

                      <div id="sj01t"></div>
                      黄色视频在线观看