zoukankan      html  css  js  c++  java
  • C++题目

    问答题

    分析代码

    1分析下面代码有什么问题?
    void test2()
    {
     char string[10], str1[10];
     int i;
     for(i=0; i<10; i++)
     {
     str1  = 'a';
     }
    strcpy( string, str1 );
    }
    

    answer:

    首先,代码根本不能通过编译。因为数组名str1为 char *const类型的右值类型,根本不能赋值。

    再者,即使想对数组的第一个元素赋值,也要使用 *str1 = ‘a’;

    其次,对字符数组赋值后,使用库函数strcpy进行拷贝操作,strcpy会从源地址一直往后拷贝,直到遇到’’为止。所以拷贝的长度是不定的。如果一直没有遇到’’导致越界访问非法内存,程序就崩了。

    完美修改方案为:

    void test2()
    {
        char string[10], str1[10];
        int i;
        for(i=0; i<9; i++)
        {
            str1[i]  = 'a';
        }
        str1[9] = '';
        strcpy( string, str1 );
    }
    
    2指出下面代码有什么问题?
    void test3(char* str1)
    {
     if(str1 == NULL){
            return ;
     }
     char string[10];
     if( strlen( str1 ) <= 10 )
     {
     strcpy( string, str1 );
     }
    }
    

    answer:

    if(strlen(str1) <= 10)应改为if(strlen(str1) < 10),因为strlen的结果未统计’’所占用的1个字节。

    3看看下面的一段程序有什么错误?
    swap( int* p1,int* p2 )
    {
     int *p;
     *p = *p1;
     *p1 = *p2;
     *p2 = *p;
    }
    

    answer:

    1.需要一个返回值void

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

    void swap( int* p1,int* p2 )
    {
     int p;
     p = *p1;
     *p1 = *p2;
     *p2 = p;
    }
    

    id swap( int* p1,int* p2 )

    {
    int p;
    p = *p1;
    *p1 = *p2;
    *p2 = p;
    }

  • 相关阅读:
    flask的类视图
    flask的消息提示flash和abort
    css—left和margin-left的区别
    Git(2)—特性
    JS 基础
    css
    搭建vue环境
    Git(1)—基础
    C中 输出格式
    软件测试_对于堆栈的单元测试
  • 原文地址:https://www.cnblogs.com/coding365/p/12872277.html
Copyright © 2011-2022 走看看