为什么即使指针指向空终止符,这个函数也会返回字符串? (指点)

问题描述 投票:0回答:1

我正在学习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 pointers
1个回答
0
投票

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.