【问题标题】:Pointer Variable and String copying - C指针变量和字符串复制 - C
【发布时间】:2016-11-08 14:49:09
【问题描述】:

所以我正在艰难地学习 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 都是指针变量,但我不确定这意味着什么,也不知道如何在这个问题的上下文中使用它们。任何帮助或“指针”(没有双关语)将不胜感激。

【问题讨论】:

  • 不,不是*d*s是指针变量,而是ds。区别很重要。
  • 阅读有关字符串复制的文档en.cppreference.com/w/c/string/byte/memcpy
  • 无论如何,您的书肯定会在提供您所描述的练习之前提供有关指针以及如何使用它们的材料。如果这些材料让您不确定如何进行练习,那么可能值得您花时间弄清楚文本的哪些方面似乎不清楚或不完整,并具体询问这些方面。
  • 不要逃课!
  • 谷歌“c指针教程”

标签: c string pointers


【解决方案1】:

除非它是sizeof 或一元&amp; 运算符的操作数,或者是用于在声明中初始化字符数组的字符串文字,否则表达式 类型为“N- T" 的元素数组将被调整("decay")为类型为 "pointer to T" 的表达式,表达式的值将是数组第一个元素的地址。

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

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

d[i] = s[i];

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

*d = *s;

并调整每个指针的值

d++;
s++;

请注意,这些操作可能会组合在一起:

*d++ = *s++;

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


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 2020-03-10
    • 2021-08-12
    相关资源
    最近更新 更多