代码片段一:
void function( )
{
char str1[10];
char str2[10];
int i;
for(i=0;i<10;i++){
str1[i] = 'a';
}
strcpy(str1,str2);
}
分析:
-->str1不能在数组内结束:因为str1存储为{aaaaaaaaaa},没有'\0'(字符结束符),所以不能结束。
-->strcpy(char *s1,char *s2)他的工作原理为:扫描s2指向的内存,逐个字符附加到s1指向的内存,直到碰到'\0'结束符才停止;但上面的代码中缺少字符结束符,所以代码具有不确定性。
--->正确代码如下:
void function(){
char str1[10];
char str2[10];
int i;
for(i=0;i<9;i++)
{
str1[i] = 'a'+i;//把bcdefghi赋给字符数组
}
str1[i] = '\0';//加上结束符
strcpy(str1,str2);
}
代码片段二:
void main(){
char *src = "hello world";
char *dest = NULL;
dest = (char *)malloc(strlen(src));
int len =strlen(src);
char *d = dest;
char *s = src[len];
while(len--!=0)
d++ = s--;
printf("&s",dest);
}
注意三点:指针与地址,指针指向的内容的表达,malloc函数的正确表达,字符串中结尾字符'\0'的重要性;
正确代码为:
int main()
{
char *src = " hello,world";
char *dest = NULL;
dest = (char*)malloc(sizeof(char)*(strlen(src)+1));
int len = strlen(src);
char *d = dest;
char *s = src+len-1;
while(len--!=0){
*d++ = *s--;
*d ='\0';
printf("%s",dest);
}
}