指针变量和字符串复制-C

指针变量和字符串复制-C,c,string,pointers,C,String,Pointers,因此,我正在艰难地学习C(只是充实)——但我遇到的一个额外问题是: #include <stdio.h> char * mystrcpy(char *, char *); int main(void) { char dest[100]; char src[] = "Test string\n"; char *p; if (p = mystrcpy(dest,src)) { printf("%s\n",p); return(0); } el

因此,我正在艰难地学习C(只是充实)——但我遇到的一个额外问题是:

#include <stdio.h>

char * mystrcpy(char *, char *);

int main(void) {
  char dest[100];
  char src[] = "Test string\n";
  char *p;

  if (p = mystrcpy(dest,src)) {
    printf("%s\n",p);
    return(0);
  }
  else {
    printf("null pointer received\n");
    return(1);
  }
}
/* mystrcpy: Copy a string from s to a buffer pointer to by d. 
   d = destination buffer
   s = source string
   return value = a pointer to the beginning of the string in the
   destination buffer. 
*/
char * mystrcpy(char *d, char *s) {
}
#包括
char*mystrcpy(char*,char*);
内部主(空){
char dest[100];
char src[]=“测试字符串\n”;
char*p;
if(p=mystrcpy(dest,src)){
printf(“%s\n”,p);
返回(0);
}
否则{
printf(“收到空指针\n”);
申报表(1);
}
}
/*mystrcpy:将字符串从s复制到由d指向的缓冲区指针。
d=目标缓冲区
s=源字符串
返回值=指向字符串开头的指针
目标缓冲区。
*/
char*mystrcpy(char*d,char*s){
}

我知道*d和*s都是指针变量,但我不确定这意味着什么,也不知道如何在这个问题的上下文中使用它们。任何帮助或“指针”(并非双关语)都将不胜感激。

除非它是
sizeof
或一元
&
运算符的操作数,或者是用于初始化声明中字符数组的字符串文字,否则将调整“T的N元素数组”类型的表达式(“衰减”)指向类型为“指针指向
T
”的表达式,表达式的值将是数组第一个元素的地址

在对
mystrcpy
的调用中,表达式
src
dest
从类型“array of
char
”衰减为“pointer to
char
”,因此函数实际接收的是与每个数组的第一个元素的地址对应的指针值

您可以使用指针表达式1上的
[]
下标运算符访问每个数组的内容:

或者,您可以直接取消对每个指针的引用:

*d = *s;
并调整每个指针的值

d++;
s++;
请注意,这些操作可以结合使用:

*d++ = *s++;
从这里开始,只需确定源字符串的结束位置


  • 表达式
    a[i]
    定义为
    *(a+i)
    ;给定指针值
    a
    ,从该地址偏移
    i
    元素(不是字节!),并取消对结果的引用。这就是为什么上面提到的数组转换规则首先存在的原因。

    不,指针变量不是
    *d
    *s
    ,而是
    d
    s
    。区别是非常重要的。在任何情况下,请阅读字符串副本上的文档,在提供您描述的练习之前,您的书肯定会介绍有关指针的材料以及如何使用指针。如果这些材料让你无法确定如何进行练习,那么你可能需要找出课文中哪些方面看起来不清楚或不完整,并具体询问这些方面。不要逃课!谷歌“c指针教程”
    *d++ = *s++;