我坚持继续c编程,不明白输出

时间:2015-02-19 12:44:19

标签: c

#include<stdio.h>
#include<string.h>
int main()
{
    char source[]="Sayonara";
    char target[8];
    strcpy(target,source);
    printf("source string= %s\n",source);
    printf("target string= %s\n",target);
    return 0;
}

输出: - 源字符串=
             目标字符串= Sayonara

2 个答案:

答案 0 :(得分:5)

source的长度为9,因为它具有空终止符\0。您正在复制超出target的范围,该范围调用未定义的行为

您需要使target长度相同或更长,以确保它在复制后以空值终止,并且不会发生越界访问。

char source[]="Sayonara";
char target[9];
strcpy(target,source);

答案 1 :(得分:3)

source复制到target后,target不会终止。由于strcpy复制到第一个空字符('\0'),它将继续复制到数组target的末尾,因为它的长度比source短一个阵列。这将调用未定义的行为。

char target[8];  

char target[9];