订单王 2011-11-15 20:40
浏览 499
已采纳

strcpy函数在linux上执行异常,在windos执行OK

代码如下:

    char a[5];
    char b[5];
    printf("point a=%d\n",&a);
    printf("point b=%d\n",&b);
    memset(a,0x00,sizeof(a));
    memset(b,0x00,sizeof(b));
    char * tmp1="123456789";
    char * tmp2="abcde";
    strcpy(a,tmp1);
    strcpy(b,tmp2);
    printf("point a=%d,a=%s\n",&a,a);
    printf("point b=%d,b=%s\n",&b,b);

 该代码在window上执行成功的。gcc版本:gcc version 3.4.2 (mingw-special)

 

在ubuntu上执行报段错误,gcc版本:gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5)

ubuntu版本:Linux ubuntu 2.6.35-22-generic #33-Ubuntu SMP Sun Sep 19 20:34:50 UTC 2010 i686 GNU/Linux

 

其中在ubuntu上执行报错的是在第二个strcpy(b,tmp2)的地方。

请各位帮忙给看看。

  • 写回答

4条回答

  • 爱上一条鱼 2011-11-15 22:44
    关注

    [code="java"]point a=2293568
    point b=2293552[/code]
    我刚试了下,windows底下好像默认给分配了16字节的数组大小,比如你再定义一个char[5] c; 那么地址应该还是2293552-16 其实还是连续的,这个不是C语言本身的问题,应该是操作系统或者是编译器的差异引起的。

    另外 下面这段代码里,b会把a给覆盖掉的。
    [code="java"]#include
    #include
    int main() {
    char a[5];
    char b[5];
    printf("point a=%d\n",&a);
    printf("point b=%d\n",&b);
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    char * tmp1="12345";
    char * tmp2="abcdefghijklmlopqrstuvwxyz";

    strcpy(a,tmp1);
    strcpy(b,tmp2);
    
    printf("point a=%d,a=%s\n",&a,a);
    printf("point b=%d,b=%s\n",&b,b);
    

    }[/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥30 matlab解优化问题代码
  • ¥15 写论文,需要数据支撑
  • ¥15 identifier of an instance of 类 was altered from xx to xx错误
  • ¥100 反编译微信小游戏求指导
  • ¥15 docker模式webrtc-streamer 无法播放公网rtsp
  • ¥15 学不会递归,理解不了汉诺塔参数变化
  • ¥15 基于图神经网络的COVID-19药物筛选研究
  • ¥30 软件自定义无线电该怎样使用
  • ¥15 R语言mediation包做中介分析,直接效应和间接效应都很小,为什么?
  • ¥15 Jenkins+k8s部署slave节点offline