开发者社区> 问答> 正文

请教 strcat应用的

使用strcat,却一直报错。
一直搞不清楚。求教。

操作系统:win10 x64
编程环境:Visual Studio 2010

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(){
    char *a=(char *)malloc(200*sizeof(char));
    a="aaa";
    printf("%s\n",a);

    char *b="bbbb";
    printf("%s\n",b);

    strcat(a,b);

    printf("%s\n",a);
    free(a);
    return 0;
}

screenshot

展开
收起
杨冬芳 2016-05-27 18:37:52 2189 0
2 条回答
写回答
取消 提交回答
  • C入门级选手的嵌入式开发人员

    用同样的代码复现了一下:
    a


    参考一个问答:https://zhidao.baidu.com/question/390378147814693085.html
    语句 a = "aaa"; 是将a指向了 只读数据段的“aaa”,因为是只读数据段,所以不允许被修改,而 strcat()函数的原型是:
    char strcat ( char destination, const char * source ); 参数destination不是一个只读的数据,是会被改变的,换句话讲,如果这里的strcat操作成功,那么只读数据段内容就会被修改,这显然是不合理的,所以这里会报错。
    我实验了以下内容替代main()函数的前两句:
    其中不可行的有:
    1,

    char *a = (char *)malloc(10 * sizeof(char));
    a = "aaa";

    2,

    char *a = "aaa";

    3,

    char *a;
    a = "aaa";
    

    其中可行的有:
    1,

    char *a = (char *)malloc(10 * sizeof(char));
    strcpy(a,"aaa");

    2,

    char a[] = "aaa";

    3,

    char a[200] = "aa";
    

    这种问题在不能很好理解内存分配的时候确实很难想明白。因为编译的时候还没有进行分配,不会报错。

    2019-07-17 19:18:37
    赞同 展开评论 打赏
  • 我说我不帅他们就打我,还说我虚伪
    #include <stdio.h>
    #include <string.h>
    int main ()
    {
        char *a=(char *)malloc(80*sizeof(char));
        char *b="bbb";
        strcpy (a,"aaa ");
        strcat (a,b);
        puts (a);
        return 0;
    }
    2019-07-17 19:18:36
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载