【问题标题】:Copy string without strcpy复制没有 strcpy 的字符串
【发布时间】:2019-02-28 19:56:35
【问题描述】:
#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[0] = '*';,然后printf("%s", temp);,看看你也修改了temp

标签: c string pointers dereference


【解决方案1】:

您只是将str 的起始地址复制到temp。这意味着对temp 的任何更改也将反映在str 中,因为它们指向相同的内存。它并没有真正模拟strcpy(dest, src),它从src 指向的以null 结尾的字符串创建一个单独的副本,该字符串从dest 指向的内存位置开始。

所以,按要求回答您的问题:否。

如果您的意图是避免 strcpy 的 O(n) 运行时间,那也是您无法真正做到的事情。

如果编程作业或练习要求您创建功能等同于 strcpy 的代码,这里是它使用的算法的高级描述:

  1. *source中的字符复制到*destination
  2. 如果刚刚复制的字符是空终止符,则退出。
  3. 否则,将指针递增到source,并将指针递增到destination
  4. 转到步骤 1。

【讨论】:

  • 感谢您的详细解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-16
  • 2020-02-17
  • 1970-01-01
  • 2013-02-26
  • 2021-07-19
相关资源
最近更新 更多