我正在学习C的基础知识,我想知道为什么这个函数有效。
char *strCpy(char *dest, char *orig){
while(*orig != '\0'){
*dest = *orig;
dest++;
orig++;
}
*dest = '\0';
return dest;
}
int main(void){
char string1[30 + 1] = "Hello world";
char string2[30 + 1];
strCpy(string2, string1);
printf("%s\n", string2);
return 0;
}
函数末尾
dest
指向空终止符,那么为什么函数仍然返回字符串呢?
我期望函数返回一个空字符串,因为指针指向函数末尾的空终止符
C 函数参数按值传递。当您将
string2
传递给 strCpy
时,它会衰减为指向第一个元素的指针,并且该指针值被复制。在 strCpy
内对其进行的任何更改都不会影响 string2
中 main
的值。
现在,
strCpy
的返回值将始终为空字符串。如果你打印它,你会看到一个空行输出。
如果要返回指向目标字符串的指针,则可以在操作该指针之前复制该指针,然后返回该副本。
char *strCpy(char *dest, char *orig){
char *dest_begin = dest;
while(*orig != '\0'){
*dest = *orig;
dest++;
orig++;
}
*dest = '\0';
return dest_begin;
}