Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在strcpy函数中将指针用作参数。试图理解书中的代码_C_Arrays_Pointers_Strcpy - Fatal编程技术网

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

在strcpy函数中将指针用作参数。试图理解书中的代码,c,arrays,pointers,strcpy,C,Arrays,Pointers,Strcpy,从我的书中: void strcpy (char *s, char *t) { int i=0; while ((s[i] = t[i]) != ’\0’) ++i; } 我试图理解教科书中的这段代码。它们不提供主函数,所以我试图了解在调用函数时如何使用参数。据我所知,字符串t[]的“I-number”将被复制到字符串s[],直到从\0转义序列中不再有可读取的字符。我真的不明白参数是如何在函数之外定义的。非常感谢您的帮助。多谢各位 这里要记住两件事: C中的字符串是chars的数组 数组作为

从我的书中:

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

我试图理解教科书中的这段代码。它们不提供主函数,所以我试图了解在调用函数时如何使用参数。据我所知,字符串t[]的“I-number”将被复制到字符串s[],直到从\0转义序列中不再有可读取的字符。我真的不明白参数是如何在函数之外定义的。非常感谢您的帮助。多谢各位

这里要记住两件事:

  • C中的字符串是
    char
    s的数组
  • 数组作为指针传递给函数
你可以这样称呼它:

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

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

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

这里有一个主要内容:

int main()
{
    char buf[30];
     strcpy(buf, "Hi!");
     puts(buf);
     strcpy(buf, "Hello there.");
     puts(buf);
}
s
t
的要点是接受程序中其他地方存在的字符数组。它们在别处定义,通常由直接调用方或上面的一个或多个调用方定义。它们的含义在运行时被替换

因为你的书是错的,所以你会遇到编译问题。应该读

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

其中
const
表示不会修改。因为strcpy是一个标准函数,所以您确实需要它是正确的。

以下是您可以如何使用该函数(注意,您应该更改函数名,因为它会与标准库冲突)


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

确定。我理解strcpy在用作调用时的用法,但每当我试图按照我的书中的方式编译代码时,就会出现“strcpy的冲突类型”错误。这本书采用了一个预定义的函数并重新定义了它,这似乎很奇怪,但这可能是因为我缺乏知识。@yiwl<代码>strcpy是标准的库函数。把你的新的命名为
strcpy0
或者别的什么,它应该可以正常工作。一个等价的
while
应该是
while((s[i]=t[i])i++(提示:nul字符
'\0'
的数值为
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);
}