嵌入式软件开发试题——供自己查漏补缺

本试题供本人查漏补缺,题目来自网络,如有侵权,请联系作者删除,谢谢。

找错题

试题1

void test1()
{
    char string[10];
    char* str1 = "0123456789";
    strcpy( string, str1 );
}

 

答案:

字符串str1需要11个字节才能存放下(包括末尾的’\0’),而string只有10个字节的空间,strcpy会导致数组越界。

 

试题2

void test2()

{

    char string[10], str1[10];

    int i;

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

    {
    
        str1[i] = 'a';

    }

    strcpy( string, str1 );

}

 

 

答案:

str1在数组内没有结束的标志’\0’, 当调用strcpy时,并不确定从复制了多少字节的数据到string开始所在内存上面,可能会破坏string数组后面内存中的数据。

注:

char* strcpy(char* des, const char* source)

{

    char* r = des;

    assert((des != NULL) && (source != NULL));

    while((*r++ = *source++) != ‘\0’);

    return des;

}

 

 

试题3

void test3(char* str1)

{

    char string[10];

    if( strlen( str1 ) <= 10 )

    {

        strcpy( string, str1 );

    }

}

 

答案:

if(strlen(str1) <= 10) 应改为 if(strlen(str1) < 10)

因为strlen调用的结果并未统计’\0’所占用的1个字节。

嵌入式软件开发试题——供自己查漏补缺嵌入式软件开发试题——供自己查漏补缺 三周子 发布了6 篇原创文章 · 获赞 0 · 访问量 7088 私信 关注
上一篇:二进制求和


下一篇:sizeof与strlen的区别及运用