c/c++语言开发共享如何在C 中连接char *变量

#include  #include  #include  int main() { char *hi = "bye"; char *bye = "abc"; strcat(hi, bye); printf("%sn", hi); } 

我如何连接这些变量? 我正在尝试的一切都崩溃了

    你不能。 字符串文字是不可修改的。

    你可以制作一个可修改的副本。 这里使用字符串文字的内容初始化char数组。

     char hi[10]="bye"; ... 

    这会奏效。

    在您的情况下,通过在字符串文字上使用strcat ,您将调用未定义的行为。

    从6.4.5p7

    如果这些数组的元素具有适当的值,则这些数组是否不同是未指定的。 如果程序试图修改此类数组,则行为未定义

    同样来自J2:来自标准的未定义行为列表

    该程序试图修改字符串文字


    请注意,即使字符串文字是可修改的,也不是连接字符串的定义行为。 连接字符串时确保连接的字符串有足够的空间 – 否则它会尝试写入char数组,而char数组本身将调用未定义的行为。 根据我在本段中所说的内容(使用字符串文字的值初始化的char数组),您可以亲眼看到一件事,

     char hi[]="bye"; 

    然后使用strcat会导致未定义的行为。

    字符串文字是不可变的 。 任何修改它的尝试都会调用未定义的行为

    如果将目标字符串存储在数组中,您将能够修改它:

     int main() { char hi[10] = "bye"; char *bye = "abc"; strcat(hi, bye); printf("%sn", hi); } 

    引用C标准草案N1570,第6.4.5 / 7节:

    如果这些数组的元素具有适当的值,则这些数组是否不同是未指定的。 如果程序试图修改此类数组,则行为未定义。

    查看更多信息为什么在写入使用“char * s”而不是“char s []”初始化的字符串时会出现分段错误?

      以上就是c/c++开发分享如何在C 中连接char *变量相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/549253.html

      (0)
      上一篇 2021年1月14日
      下一篇 2021年1月14日

      精彩推荐