c - strcat 追加多于分配给 array[ ]

标签 c

我正在学习弦乐,在上次练习中发生了一些奇怪的事情:

    char cadena5[]="Mensaje: ";
    char cadena6[50]="Mensaje: ";   //reserva espacio extra en memoria

    char cadena7[]="Programar en Objective C es facil";


    NSLog(@"La logitud de cadena5 es: %li", strlen(cadena5) );
    NSLog(@"La logitud de cadena6 es: %li", strlen(cadena6) );
    NSLog(@"La logitud de cadena7 es: %li", strlen(cadena7) );

    strcat(cadena5, cadena7);
    NSLog(@"strcat %s", cadena5);

我的输出显示了附加的完整字符串,但在我的书中说 xcode 会提示,因为没有足够的可用空间附加到“cadena5”中,建议改用“cadena6”。

2014-05-16 23:43:02.518 Array de chars[3027:303] La logitud de cadena5 es: 9
2014-05-16 23:43:02.518 Array de chars[3027:303] La logitud de cadena6 es: 9
2014-05-16 23:43:02.519 Array de chars[3027:303] La logitud de cadena7 es: 33
2014-05-16 23:43:02.520 Array de chars[3027:303] strcat Mensaje: Programar en Objective C es facil

查看教程应该会出现一个“signal SIGABRT”线程... 发生了什么?这正常吗?

最佳答案

根据所有权利,该程序理应获得 SEGFALT 甚至更差。但它很幸运,在需要的地方有内存。

在更一般的情况下,它可能经历了其他变量的“无法解释的”变化——如果内存中的正确位置有很多其他变量的话。

您可以通过非常小的更改使该程序可移植且正确地工作:

 char cad1[100] = "Hola ";

这会过度分配目标字符串并允许附加有限数量的文本。

关于c - strcat 追加多于分配给 array[ ],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23705221/

相关文章:

c - C语言中如何链接两个文件

可以在没有数学支持的情况下编译 spidermonkey 吗?

c - 什么是 Rss 信息?不是 Rss xml 提要

c - 如何将字符串中的字符从头移动到尾

c - C中bool变量的效用是什么?

c - 需要左值作为赋值的左操作数(C 程序)

c - 复制传递给函数的字符串作为 C 中的参数

c - 程序崩溃了,我不明白为什么

c - 如何计算开关数量并通过应用屏蔽来开关相应数量的LED?

c++ - OpenGL 更改可分离着色器程序中的不同位置