从我的书中
void strcpy (char *s, char *t)
{
int i=0;
while ((s[i] = t[i]) != ’\0’)
++i;
}
我正试图从我的教科书中理解这段代码。它们没有提供任何主要功能,因此我试图围绕如何在调用函数时使用参数进行介绍。据我了解,从\ 0转义序列开始,字符串t []的“ i-number”字符将被复制到字符串s [],直到不再需要读取字符为止。我不太了解如何在函数外部定义参数。任何帮助是极大的赞赏。谢谢。
答案 0 :(得分:2)
这里要记住两件事:
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);
}
s
和t
的意义是接受程序中其他地方存在的字符数组。它们是在其他地方定义的,通常在此级别由直接调用者或上面的另一个调用者定义。它们的含义在运行时被替换。
由于您的书是错误的,您会遇到编译问题。应该阅读
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时,您将指向s
和t
的第一个字符。 s[i] = t[i]
将第i个字符从t
复制到s
的第i个字符。 C语言中的此赋值本身是一个表达式,并返回被复制的字符,使您可以将其与空终止符0
(即)进行比较。 (s[i] = t[i]) != ’\0’
指示字符串的结尾,如果复制的字符不是空终止符,则循环继续进行,否则它将结束。