前几天刚开始学习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
1条答案
按热度按时间wydwbb8l1#
数组
name1
的长度(6个字节)太小,无法接收字符串"Elijah"
(7个字节,包括空终止符)。您的程序有未定义的行为。一个可能但不可靠的解释是,
name1
和name2
在程序堆栈区域中是连续的,将7个字节复制到name1
会导致name2
的第一个字节被'\0'
(字符串末尾的空终止符)覆盖,从而导致在第三行观察到输出。可以通过将
name1
定义为