C语言里的strcpy()

来源:互联网 发布:mac air怎么截屏 编辑:程序博客网 时间:2024/05/16 05:04

全局区/静态区(Global Static Area):并且在C语言中初始化的全局变量和静态变量放在同一个块,未初始化的全局变量放在另一个块(在C++中,由于全局变量和静态变量编译器会给这些变量自动初始化赋值,所以没有区分,都在一起)。

#include <cstdio>#include <cstring>using namespace std;char a[5]={'A','B','C','D','E'};//char c[5]={'0','1','2','3','4'};//char e[10]={'0','1','2','3','4','5','6','7','8','9'};char b[10]={'0','1','2','3','4','5','6','7','8','9'};char d[10]={'a','b','c','d','e','f','g','h','i','j'};char f[5]={'!','@','#','$','%'};int main(){     for(int i=0;i<5;i++){        printf("%c  loc  %x\n",a[i],&a[i]);    }    printf("---------------\n");    for(int i=0;i<10;i++){        printf("%c loc  %x\n",b[i],&b[i]);    }     printf("---------------\n");    for(int i=0;i<10;i++){            printf("%c loc  %x\n",d[i],&d[i]);    }   strcpy(a,b);     printf("--------strcpy-------\n");   // char *p=b;    //char *p1=a;   // for(int i=0;i<10;i++){   //     *(p1+i)=*(p+i);   // }    for(int i=0;i<5;i++){        printf("%c  loc  %x\n",a[i],&a[i]);    }   // for(int i=0;i<5;i++){   //     printf("%c\n",c[i]);   // }    //for(int i=0;i<10;i++){     //   printf("%c\n",e[i]);    //}    printf("---------------\n");    for(int i=0;i<10;i++){        printf("%c loc  %x\n",b[i],&b[i]);    }     printf("---------------\n");    for(int i=0;i<10;i++){            printf("%c loc  %x\n",d[i],&d[i]);    }    return 0;}

输出结果:

A  loc  402000B  loc  402001C  loc  402002D  loc  402003E  loc  402004---------------0 loc  4020051 loc  4020062 loc  4020073 loc  4020084 loc  4020095 loc  40200a6 loc  40200b7 loc  40200c8 loc  40200d9 loc  40200e---------------a loc  40200fb loc  402010c loc  402011d loc  402012e loc  402013f loc  402014g loc  402015h loc  402016i loc  402017j loc  402018--------strcpy-------0  loc  4020001  loc  4020012  loc  4020023  loc  4020034  loc  402004---------------5 loc  4020056 loc  4020067 loc  4020078 loc  4020089 loc  402009a loc  40200ab loc  40200bc loc  40200cd loc  40200de loc  40200e---------------f loc  40200fg loc  402010h loc  402011i loc  402012j loc  402013! loc  402014@ loc  402015# loc  402016$ loc  402017% loc  402018Process returned 0 (0x0)   execution time : 0.730 sPress any key to continue.

可以看到,它们这几个数组的区域是相邻的,并且调用strcpy()函数用b对a赋值,可以看到会覆盖在和a相邻的数组。
strcpy()函数使用的是‘\0’进行结束判断,一般的实现为

char *strcpy(char *strDest, const char *strSrc){    if ( strDest == NULL || strSrc == NULL)        return NULL ;    if ( strDest == strSrc)        return strDest ;    char *tempptr = strDest ;    while( (*strDest++ = *strSrc++) != ‘\0’);        return tempptr ;}

所以在没有’\0’符号的前提下会一直往下赋值,直到遇到内存里的某个’\0’(这个字符在内存里非常常见)。

原创粉丝点击