转载请注明原文来自:http://blog.csdn.net/lizhiliang06/article/details/8649336
小明最近写程序发现经常会出现一些莫名其妙的错误,
就过来问大明,说程序总是出现问题的,而且莫名其妙的就挂在了strcpy这里了,
郁闷了挺久的了,于是刚毕业不久的小明还是不太好意思的来问了大明,
大明看了小明的代码,发现了一些问题,这些问题是平时写程序不太注意时经常发生的哦,
现在就展开来让大家一起看看
- #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");/*注意*/
- }
下面是对以上所犯错误做修正:
- /*
- * 注意所犯错误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()原型设计代码:
比较常见的犯错应该像下面代码了,
- /*请写出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++;
- }
转载请注明原文来自:http://blog.csdn.net/lizhiliang06/article/details/8649336