在用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想把另一个字符串连到它后面,即试图改变常量的值,所以是不行的!!!!!
------解决方案--------------------
同意
------解决方案--------------------
- 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);