不使用 strcpy 复制字符串
Copy string without strcpy
#include <stdio.h>
#include <stdlib.h>
int main() {
char *str, *temp;
str = malloc(sizeof(char) * 100);
fgets(str, 100, stdin);
temp = str;
printf("%s", str);
return 0;
}
在不使用 strcpy()
函数的情况下将一个字符串复制到另一个字符串的有效代码吗?
您只是将 str
的起始地址复制到 temp
。这意味着对 temp
的任何更改也将反映在 str
中,因为它们指向相同的内存。它并没有真正模拟 strcpy(dest, src)
,后者创建了 src
指向的空终止字符串的 单独副本 ,从 [=] 指向的内存位置开始16=].
所以,回答你的问题:没有。
如果你的意图是避免 strcpy
的 O(n) 运行 时间,那也是你不能真正做到的事情。
如果编程作业或练习要求您创建功能等同于 strcpy
的代码,这里是其使用的算法的高级描述:
- 将
*source
中的字符复制到*destination
- 如果刚刚复制的字符是空终止符,则退出。
- 否则,将指针递增到
source
,并将指针递增到destination
。
- 转到步骤 1。
#include <stdio.h>
#include <stdlib.h>
int main() {
char *str, *temp;
str = malloc(sizeof(char) * 100);
fgets(str, 100, stdin);
temp = str;
printf("%s", str);
return 0;
}
在不使用 strcpy()
函数的情况下将一个字符串复制到另一个字符串的有效代码吗?
您只是将 str
的起始地址复制到 temp
。这意味着对 temp
的任何更改也将反映在 str
中,因为它们指向相同的内存。它并没有真正模拟 strcpy(dest, src)
,后者创建了 src
指向的空终止字符串的 单独副本 ,从 [=] 指向的内存位置开始16=].
所以,回答你的问题:没有。
如果你的意图是避免 strcpy
的 O(n) 运行 时间,那也是你不能真正做到的事情。
如果编程作业或练习要求您创建功能等同于 strcpy
的代码,这里是其使用的算法的高级描述:
- 将
*source
中的字符复制到*destination
- 如果刚刚复制的字符是空终止符,则退出。
- 否则,将指针递增到
source
,并将指针递增到destination
。 - 转到步骤 1。