[英]Segmentation Fault while trying to copy string in C function
我在“ C”中有一个函数,应该可以实现自己的strcpy程序。 这就是我写的 但是,我无法调试细分错误的原因。
#include <stdio.h>
#include <stdlib.h>
char * mystrcpy(char *dest, char *src) {
char * ptr = dest;
while (*src != '\0'){
*ptr = *src;
ptr++; src++;
//printf("Dest is \"%s\" and Source is \"%s\"\n",dest,src);
}
*ptr = '\0';
return dest;
}
int main() {
char str[] = "I rock always";
char * dest = NULL;
dest = mystrcpy(dest, str);
printf("Source String %s and Destination String %s\n", str, dest);
}
有人可以向我解释这种行为吗?
您必须为目标字符串分配内存:
int main() {
char str[] = "I rock always";
char * dest = (char*)malloc(strlen(str) + 1);
dest = mystrcpy(dest, str);
printf("Source String %s and Destination String %s\n", str, dest);
}
当然,最终释放内存的一种好方法:
free(dest);
您永远不会为*dest
指向分配任何内存。
它开始指向NULL,然后您尝试: *ptr = *src
。
您必须为目标字符串缓冲区分配内存。
内存管理是C语言中非常重要的一部分...您需要非常小心,以便在使用内存时分配和取消分配内存,并且内存会超出需求。 否则将导致分段错误(无法分配内存)和内存泄漏(无法释放内存)
这里的其他答案为您提供了malloc的示例,因此在此不再赘述。
您应该尽可能使用已经可用的功能,而不是编写自己的功能。 这样可以避免实现中的错误,因为有人已经为您调试和优化了它。
分配内存并尝试...。
#include <stdio.h>
#include <stdlib.h>
char * mystrcpy(char *dest, char *src)
{
char * ptr = dest;
int index=0;
while (*src != '\0')
{
*(ptr+index) = *(src+index);
index++;
}
*(ptr+index) = '\0';
return dest;
}
int main()
{
char str[] = "I rock always";
char * dest = (char*)malloc((strlen(str)+1)*sizeof(char));
dest = mystrcpy(dest, str);
printf("Source String %s and Destination String %s\n", str, dest);
free(dest);
return 0;
}
#include <stdio.h>
/* this the K&R version of strcpy */
char * mystrcpy(char *dest, char *src) {
char *ptr = dest;
while ( *ptr++ = *src++ ) {;}
return dest;
}
int main(void) {
char str[] = "I rock always";
char dest[sizeof str];
char *result;
result = mystrcpy(dest, str);
printf("Source String %s and Destination String %s and result %s\n", str, dest, result);
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.