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

时间:2016-11-08 14:49:09

标签: 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);
  }
  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) {
}

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

1 个答案:

答案 0 :(得分:0)

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

在对mystrcpy的调用中,表达式 srcdest从“char”类型“衰减”到“指针”到char“,所以函数实际接收的是与每个数组的第一个元素的地址相对应的指针值。

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

d[i] = s[i];

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

*d = *s;

并调整每个指针的值

d++;
s++;

请注意,可以合并这些操作:

*d++ = *s++;

从那里只需要确定源字符串的结束位置。

<小时/>

  1. 表达式a[i] 已定义*(a + i);给定指针值a,从该地址偏移i个元素( not bytes!)并取消引用结果。这就是为什么首先存在上述阵列转换规则的原因。