我创建了一个字符串复制函数(strcpy),但是它的输出是连接的

fivyi3re  于 2022-12-26  发布在  其他
关注(0)|答案(1)|浏览(117)

前几天刚开始学习C语言,我试着从<string.h>库中创建一个类似strcpy的字符串复制函数,但是它的输出出乎意料。
这是密码

#include <stdio.h>

int stringLen(char *l) {
    int len = 0;
    while (*l != '\0') {
        l++;
        len++;
    }
    return len;
}

int main() {
    char name1[] = "Rohit";
    char name2[] = "Elijah";
    int lenOf_target = stringLen(name2);
    printf("The len of name2 is: %d\n", lenOf_target);
    copyString(name1, name2, lenOf_target);
    printf("The target name1 is 'Rohit' now %s\n", name1);
    printf("The name2(source) still is %s and the length is %d\n",
           name2, stringLen(name2));
}

以下是输出

The len of name2 is: 6
The target name1 is 'Rohit' now Elijah
The name2(source) still is  and the length is 0
wydwbb8l

wydwbb8l1#

数组name1的长度(6个字节)太小,无法接收字符串"Elijah"(7个字节,包括空终止符)。您的程序有未定义的行为。
一个可能但不可靠的解释是,name1name2在程序堆栈区域中是连续的,将7个字节复制到name1会导致name2的第一个字节被'\0'(字符串末尾的空终止符)覆盖,从而导致在第三行观察到输出。
可以通过将name1定义为

char name1[7] = "Rohit";  // or any length larger than 7

相关问题