在strcpy函数中将指针用作参数。试图理解书中的代码

时间:2019-03-30 00:37:51

标签: c arrays pointers strcpy

从我的书中

void strcpy (char *s, char *t)
{
int i=0;
while ((s[i] = t[i]) != ’\0’)
++i;
}

我正试图从我的教科书中理解这段代码。它们没有提供任何主要功能,因此我试图围绕如何在调用函数时使用参数进行介绍。据我了解,从\ 0转义序列开始,字符串t []的“ i-number”字符将被复制到字符串s [],直到不再需要读取字符为止。我不太了解如何在函数外部定义参数。任何帮助是极大的赞赏。谢谢。

3 个答案:

答案 0 :(得分:2)

这里要记住两件事:

  • C中的字符串是char s的数组
  • 数组作为指针传递给函数

所以您可以这样称呼:

char destination[16];
char source[] = "Hello world!";

strcpy(destination, source);
printf("%s", destination);

i只是一个内部变量,它在strcpy函数之外没有任何意义(它不是参数或任何东西)。此函数将整个字符串t复制到s,并在看到\0字符(根据C约定标记字符串的结尾)时停止。

编辑:而且,strcpy是标准库函数,因此,如果尝试重新定义它,可能会发生奇怪的事情。给您的副本起个新名字,一切都会好起来的。

答案 1 :(得分:0)

这是给您的主要提示:

int main()
{
    char buf[30];
     strcpy(buf, "Hi!");
     puts(buf);
     strcpy(buf, "Hello there.");
     puts(buf);
}

st的意义是接受程序中其他地方存在的字符数组。它们是在其他地方定义的,通常在此级别由直接调用者或上面的另一个调用者定义。它们的含义在运行时被替换。

由于您的书是错误的,您会遇到编译问题。应该阅读

const strcpy (char *s, const char *t)
{
     ...
     return s;
  }

const表示不会修改的位置。由于strcpy是标准函数,因此您确实需要正确无误。

答案 2 :(得分:0)

这是您可能使用该函数的方式(请注意,您应更改函数名称,因为它会与标准库冲突)

void my_strcpy (char *s, char *t)
{
    int i=0; 
    while ((s[i] = t[i]) != ’\0’)
    ++i;
}

int main()
{
    char *dataToCopy = "This is the data to copy";
    char buffer[81];   // This buffer should be at least big enough to hold the data from the 
                       // source string (dataToCopy) plus 1 for the null terminator

    // call your strcpy function
    my_strcpy(buffer, dataToCopy);

    printf("%s", buffer);
}

在代码中,i变量指向字符数组中的字符。因此,当i为0时,您将指向st的第一个字符。 s[i] = t[i]将第i个字符从t复制到s的第i个字符。 C语言中的此赋值本身是一个表达式,并返回被复制的字符,使您可以将其与空终止符0(即)进行比较。 (s[i] = t[i]) != ’\0’指示字符串的结尾,如果复制的字符不是空终止符,则循环继续进行,否则它将结束。