当前位置:编程学习 > C/C++ >>

透过strcpy()看问题

小明最近写程序发现经常会出现一些莫名其妙的错误,
就过来问大明,说程序总是出现问题的,而且莫名其妙的就挂在了strcpy这里了,
郁闷了挺久的了,于是刚毕业不久的小明还是不太好意思的来问了大明,
大明看了小明的代码,发现了一些问题,这些问题是平时写程序不太注意时经常发生的哦,
现在就展开来让大家一起看看
 
[cpp] 
#include <stdio.h>  
/* 
 * 注意所犯错误1 
 */  
void error1()  
{  
    char str0[10];  
    char *str1 = "0123456789";   
    strcpy(str0, *str1);  
}  
  
/* 
 *注意所犯错误2 
 */  
void error2()  
{  
    char str0[10];  
    char str1[10];  
    int i = 0;  
  
    for(i=0; i<10; i++)  
    {  
        str1[i] = 'a';    
    }  
  
    strcpy(str0, str1);  
}  
  
/* 
 *注意所犯错误3 
 */  
void error3(char *str1)  
{  
    char str0[10];  
    int len = strlen(str1);  
    if(len <= 10)  
        strcpy(str0, str1);  
}  
  
void main()  
{  
    error1();  
    error2();  
    error3("001123456789");/*注意*/  
  
}  
下面是对以上所犯错误做修正:
[cpp] 
/* 
 * 注意所犯错误1修正 
 */  
void right1()  
{  
    char str0[11] = {0};  
    char *str1 = "0123456789";   
    strcpy(str0, str1);  
}  
  
/* 
 *注意所犯错误2修正 
 */  
void right2()  
{  
    char str0[11] = {0};  
    char str1[11] = {0};  
    int i = 0;  
  
    for(i=0; i<10; i++)  
    {  
        str1[i] = 'a';    
    }  
  
    strcpy(str0, str1);  
}  
  
/* 
 *注意所犯错误3修正 
 */  
void right3(char *str1)  
{  
    char str0[10] = {0};  
    int len = strlen(str1);  
    if(len < 10)  
        strcpy(str0, str1);  
}  
  
void main()  
{  
    right1();  
    right2();  
    right3("001123456789");/*注意*/  
  
}  
 
请写出strcpy()原型设计代码:
比较常见的犯错应该像下面代码了,
[cpp] 
/*请写出strcpy()函数原型*/  
/* 
*注意1 
*/  
void strcpy(char *dest, char *source)  
{  
    while(*source != '\0')  
         *dest++ = *source++;  
}  
  
/* 
 * 注意2 加上const,防止参数被改变 
 */  
void strcpy(char *dest, const char *source)  
{  
    while(*source != '\0')  
         *dest++ = *source++;  
}  
  
/* 
 * 好的strcpy应该如下 
 */  
void strcpy(char *dest, const char *source)  
{  
    assert((dest != NULL) && (source != NULL));  
  
    const char *temp_src = source;  
    char *temp_dest = dest;//防止过程中改变dest的地址  
  
    while(*temp_src != '\0')  
         *temp_dest++ = *temp_src++;  
}  
 
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,