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
notallocatedarr[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;
}