专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > C语言

请问一个关于strcat函数的有关问题

发布时间:2011-06-28 13:52:39 文章来源:www.iduyao.cn 采编人员:星星草
请教一个关于strcat函数的问题
在用strcat函数时用了下面两种方法
C/C++ code

    char name[1024]="test_352x288_176x144_25fps_1s_26f";
    char *extension=".264";

        strcat(name,extension);
    printf("%s\n",name);


这种方法可以正常执行
但是下面的代码执行时就提示出错了,提示是发生访问冲突
C/C++ code

    char *name=(char *)malloc(1024*sizeof(char));
    name="test_352x288_176x144_25fps_1s_26f";
    char *extension=".264";

    strcat(name,extension);
    printf("%s\n",name);


请问这是什么原因,谢谢

------解决方案--------------------
strcpy(name,"test_352x288_176x144_25fps_1s_26f");

name开辟了1024*sizeof(char)大小的空间
但是你name指向了一个常量字符串 跟之前开辟的那块空间就没有关系了 
当然访问出错了

------解决方案--------------------
char *name=(char *)malloc(1024*sizeof(char));
name="test_352x288_176x144_25fps_1s_26f";

下断点,单步跟踪一下,name的值变了
字符串拷贝用strcpy
------解决方案--------------------
strcat("test_352x288_176x144_25fps_1s_26f", ".264");

好好理解下指针,和常量吧。
------解决方案--------------------
char *name=(char *)malloc(1024*sizeof(char));
name="test_352x288_176x144_25fps_1s_26f";
你虽然开辟了一块可用的自由空间给name,但是后面那句你又把一个常量字符串的首地址传给了name,name指向的为一个常量字符串,常量的值是不能改变的,而你后面的strcat想把另一个字符串连到它后面,即试图改变常量的值,所以是不行的!!!!!
------解决方案--------------------
同意
探讨

char *name=(char *)malloc(1024*sizeof(char));
name="test_352x288_176x144_25fps_1s_26f";
你虽然开辟了一块可用的自由空间给name,但是后面那句你又把一个常量字符串的首地址传给了name,name指向的为一个常量字符串,常量的值是不能改变的,而你后面的strcat想把另一个字符串连到它后面,即试图改变常量的……

------解决方案--------------------
C/C++ code
   
    char *name=(char *)malloc(1024*sizeof(char));//分配内存name指向分配但未初始化的内存地址
    name="test_352x288_176x144_25fps_1s_26f";//将临时字符串常量的地址复制给char类型指针 , 此name指向的是临时字符串常量地址 
    char *extension=".264";
    strcat(name,extension);//发生冲突!
    printf("%s\n",name);
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: