我正在学习弦乐,在上次练习中发生了一些奇怪的事情:
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/