zoukankan      html  css  js  c++  java
  • c/c++面试题一

    1.找错

    void test1()

    {

    char string[10];

    char *str1="0123456789";

    strcpy(string,str1);

    }

    试题一字符串str1需要11个字节才能存放下(包括末尾的‘/0'),而string 

    只有10个字节的空间,strcpy会导致数组越界。

    void test2()

    {

    char string[10],str1[10];

    int i;

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

    {

    str1[i]='a';

    }

    strcpy(string,str1);

    }

    对试题2,如果面试者指出字符数组str1不能在数组内结束,指出strcpy

    (string,str1)调用使得从str1内存起复制到string内存起所复制的字节数具有

    不确定性,库函数strcpy工作方式

    void test3(char *str1)

    {

    char string[10];

    if (strlen (str1)<=10)

    {

    strcpy(string,str1);

    }

    }

    if (strlen(str1<=10)

    {

    strcpy(string,str1);

    }

    }

    对试题3,if(strlen(str1)<=10)应改为if (strlen (str1)<10),因为strlen的结果

    未统计'/0'所占用的1个字节。

    解析:

    (1)字符串以’/0'结尾;

    (2)对数组越界把握的敏感度

    (3)库函数strcpy的工作方式,如果编写一个标准strcpy函数的总分值

    void strcpy(char *strDest,char *strSrc)

    {

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

    }

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

    //对源字符串加const,表明其为输入参数

    {

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

    }

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

    {

    //对源地址和目的地址加非0断言

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

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

    }

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

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

    {

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

    char *address =strDest;

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

    return address;

    }

    (4)对strlen的掌握,它没有包括字符串末尾的'/0'

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

    {

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

    int len ;

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

    {

    len++;

    }

    return len;

    }

    试题4:

    void GetMemory(char *p)

    {

    p=(char*)malloc(100);

    }

  • 相关阅读:
    java 并发性和多线程 -- 读感 (一 线程的基本概念部分)
    [翻译]Spring框架参考文档(V4.3.3)-第二章Spring框架介绍 2.1 2.2 翻译--2.3待继续
    java 内存模型
    控制反转容器& 依赖注入模式 ---读感。
    go json null字段的转换
    分布式数据库----数据同步
    java 多线程--- Thread Runnable Executors
    go runtime.Gosched() 和 time.Sleep() 做协程切换
    sql 里面 join in 的差别,join的用法
    定时器
  • 原文地址:https://www.cnblogs.com/heruonan/p/8426013.html
Copyright © 2011-2022 走看看