c - 在 C 中使用 strcpy() 函数
问题描述
我目前是编程新手,并且正在学习我们学院正在教给我们的 C 语言。strcpy()
我对头文件下函数的实际功能有疑问#include<strings.h>
该功能的一般用途如下 -
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char a[] = "google";
char *b = (char*)malloc((strlen(a) +1)*sizeof(char));
strcpy(b,a);
printf("%s, %s\n", a, b); //prints google, google
free(b);
}
我们得到以下格式和相同的原型:
char *strcpy( char *to, const char *from)
{
char *temp = to;
while (*to++ = *from++);
return temp;
}
我对此有几个疑问-
函数中的额外指针 ( temp ) 要求是什么?我们不能
return to;
在函数的末尾吗?我说服自己使用了 temp 变量,因为在每个 while 循环期间,指针
to
都会自行改变。即首先*to
将被分配*from
,然后to = to +1
,from = from +1
将发生,这将导致更改存储在指针中的地址to
。但如果这是真的,那么指针from
呢?strcpy()
请问,它在函数结束时也不会改变吗?返回存储在 temp 中的地址的函数在哪里?(该功能仅在
b = strcpy(b,a);
被提及的情况下才起作用strcpy(b,a);
)
为了检查给定的函数,我还创建了自己的函数“strcpy_me”,并以相同的格式和原型使用它,它给出了相同的结果。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char *strcpy_me( char *to, const char *from)
{
char *temp = to;
while (*to++ = *from++);
return temp;
}
int main()
{
char a[] = "google";
char *b = (char*)malloc((strlen(a) +1)*sizeof(char));
strcpy_me(b,a);
printf("%s, %s\n", a, b); // prints google, google
free(b);
}
请帮我澄清我的疑问。
解决方案
见2
strcpy 的实现要求返回一个指向目标字符串开头的指针。因此,如果您想以与 相同的方式实现您的函数,则
strcpy
必须保存作为参数传递的原始指针的副本,以防您打算在函数内更改该参数。这不是一个特别有用或合理的功能,但 strcpy 从一开始就是这样。不明白你的意思; 这里显然:
return temp;
return to;
是错的。您必须意识到无论调用者是否使用该值,该函数都会返回一个值。严格的编译器可能会警告“未使用函数的值”,在这种情况下,您必须编写(void) strcpy(a,b);
以使其静音。由于您的示例不使用返回的值,所以它是错误的并不重要。
推荐阅读
- scala - 为什么这个 Scala Akka 代码无法编译?
- database - vb.net OleDbDataAdapter("SELECT *") 中的问题
- javascript - Angular如何将本地图像引用到JSON对象中
- arrays - 如何从 mongo 获取嵌套数组列表?
- google-chrome-devtools - 有没有办法防止 chrome 访问 IndexedDB?
- gstreamer - 有没有办法将 RFB (vnc) 流保存到文件中?[GStreamer]
- catboost - CatBoost 中的多类多标签分类
- javascript - 如何在客户端正确下载 xlsx 文件?
- java - 如何使用响应式驱动程序连接到 Neo4J 嵌入式实例?
- html - 从右到左打开导航栏