指针在C中导致错误消息

时间:2018-04-21 11:53:40

标签: c

#include <stdio.h>   

void Strcat(char* a, char* b);   

int main(int argc, const char * argv[]) {
    char c[]  = "abcdefg";
    char d[]  = "hijklmn";
    Strcat(c, d);
    printf("%s\n",c); 
}

void Strcat(char* a, char* b)
{
    for(; *a!= '\0';a++);

    for(; *b != '\0';a++,b++)
    {
        *a = *b;
    } 
}

该函数用于复制c末尾的String d。它工作但编译器(XCode)给我一些反馈如下:

    0x7fff50716e34 <+0>:  movl   $0x2000148, %eax   ; imm = 0x2000148 
    0x7fff50716e39 <+5>:  movq   %rcx, %r10
    0x7fff50716e3c <+8>:  syscall 
->  0x7fff50716e3e <+10>: jae    0x7fff50716e48.    ; <+20> Thread 1: signal SIGABRT
    0x7fff50716e40 <+12>: movq   %rax, %rdi
    0x7fff50716e43 <+15>: jmp    0x7fff5070e0b8     ; cerror_nocancel
    0x7fff50716e48 <+20>: retq   
    0x7fff50716e49 <+21>: nop    
    0x7fff50716e4a <+22>: nop    
    0x7fff50716e4b <+23>: nop  

错误消息看起来像是一种我几乎无法理解的程序集。我是C的新人,所以有人可以告诉我这意味着什么吗?

2 个答案:

答案 0 :(得分:2)

数组c太小,无法存储其初始值和d的串联。你在阵列之外写作。

答案 1 :(得分:1)

从标准strcat函数的文档中提示:

  

追加src指向的以null结尾的字节字符串的副本   到dest指向的以null结尾的字节字符串的末尾。该   character src [0]替换dest末尾的null终止符。该   结果字节字符串以空值终止。

     

如果目标数组不大,则行为未定义   足够src和dest的内容和终止null   字符即可。如果字符串重叠,则行为未定义。该   如果dest或src不是指向a的指针,则行为未定义   以null结尾的字节字符串。