首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-06-15 
请教一个关于strcat函数的问题在用strcat函数时用了下面两种方法C/C++ codechar name[1024]test_352x288

请教一个关于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); 

热点排行