透过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++ ,