Arrays 如何在没有内部函数的情况下复制C中的字符数组

Arrays 如何在没有内部函数的情况下复制C中的字符数组,arrays,c,Arrays,C,这是我的密码 char function(char *dst) { int i; char *arr; i = 0; while(dst[i] != '\0') { arr[i] = dst[i]; i++; } dst[i] != '\0' return(arr); } int main(void) { char a[] ="asdf" printf(&quo

这是我的密码

char function(char *dst)
{
    int i;
    char *arr;

    i = 0;
    while(dst[i] != '\0')
    {
        arr[i] = dst[i];
        i++;
    }
    dst[i] != '\0'
    return(arr);
}

int main(void)
{
    char a[] ="asdf"
    printf("%s", function(a);
}

我想将
*dst
复制为空
*arr
,但我的代码不起作用。 我不明白。 如何在C中复制没有内部函数的数组(ex_strcpy、memspy…)
谢谢

如果要动态复制数组,需要使用malloc或其他等效工具为char数组分配内存。确保完成后释放内存。我建议读一些关于malloc的文章,并用c语言分配内存

这可能是一个好的开始

#包括
#包括
char*函数(char*dst,大小和长度){
int i;
//分配字符数组所需的内存。
char*arr=(char*)malloc(sizeof(char)*长度);
i=0;
而(dst[i]!='\0'){
arr[i]=dst[i];
i++;
}
arr[length-1]='\0';
返回(arr);
}
内部主(空){
字符a[]=“asdf”;
//获取数组的长度
尺寸长度=尺寸(a)/尺寸(a[0]);
char*val=函数(a,长度);
printf(“%s”,val);
免费(val);
}

除了缺少
并确保传递给函数的
字符串始终是
'\0'
终止字符串(否则程序将产生副作用
strcpy
原因)。并且返回的是
char*
而不是char,您没有为
arr
分配内存

// return char * instead of char
char* function(char *dst)
{
    // Note - sizeof(dst) wont work
    // Neither does sizeof(dst)/sizeof(char)
    // allocate one extra for '\0'
    size_t size_to_alloc = (strlen(dst) + 1) * (sizeof *arr);
    char *arr = malloc( size_to_alloc  );
    char *p = arr;
    for ( ; *dst ; p++, dst++)
         *p = *dst;
    *p = '\0';
    return(arr);
} 

如果有可能在不使用c函数的情况下复制字符串,那么也许可以像c函数那样进行复制

看看strcpy的功能可能会很有趣:

事实上,它使用memcpy:

这里是魔法

void *
memcpy (void *dest, const void *src, size_t len)
{
  char *d = dest;
  const char *s = src;
  while (len--)
    *d++ = *s++;
  return dest;
}

strlen:

您缺少内存分配,基本上是在尝试重新编码。见下文:

char*ft\u strdup(const char*src)
{
char*dst;
内伦;
len=0;
while(src[len])//没有内部函数
++len;
if(!(dst=malloc(sizeof(char)*(len+1))//需要1个额外的char以NULL终止。
返回NULL;
dst[len]='\0';
而(--len>-1)
dst[len]=src[len];
返回dst;
}
请注意,编写自己版本的strdup并将其包含在程序库中是有意义的。

您可以使用
memcpy()
直接复制内存,就像在C和C中一样,任何字符串都必须以
\0
终止(sentinel值)

#包括
#包括
int main()
{
字符源[]=“世界”;
char destination[]=“你好”;
/*在memcpy之前打印目标字符串*/
printf(“原始字符串:%s\n”,目标);
/*将源的内容复制到目标*/
memcpy(目的地、来源、sizeof(来源));
/*在memcpy之后打印目标字符串*/
printf(“修改的字符串:%s\n”,目的地);
返回0;
}

来源:

我不明白你认为“内部功能”是什么意思,也不明白你为什么要避免它们。无论如何,在这里,没有任何用于复制的函数可以帮助您,因为问题在于您没有正确理解底层内存中发生了什么。您不能随意选择要将字符串复制到的位置。您必须分配内存。请通读并@JB P提示:当第一次调用
arr[i]
时,指针
arr
的值是多少?您的代码不会编译,除非您修复此
char a[]=“asdf”
char*arr
notallocated
arr[i]=dst[i]
将变成kaboomMinor:“不使用c函数”-->这个答案使用了
strlen()
。是的,但我们知道第一个字符串的长度。我添加strlen源。Thanks@u__:简单地指出一些错误是没有帮助的。下面是解释的链接:
char *
STRCPY (char *dest, const char *src)
{
  return memcpy (dest, src, strlen (src) + 1);
}
void *
memcpy (void *dest, const void *src, size_t len)
{
  char *d = dest;
  const char *s = src;
  while (len--)
    *d++ = *s++;
  return dest;
}
#include<stdio.h>
#include<string.h>

int main()
{
  char source[] = "World";   
  char destination[] = "Hello ";   
  /* Printing destination string before memcpy */
  printf("Original String: %s\n", destination);
  /* Copies contents of source to destination */
  memcpy (destination, source, sizeof(source)); 
  /* Printing destination string after memcpy */
  printf("Modified String: %s\n", destination);

  return 0;
}