user-0 提问: strcpy函数的自实现，gcc编译，到while时发生段错误，我哪里写错了吗，大家有看出问题吗？  

回复:
user: user-1
content: 字符串字面值不能作为dest对象吧。

user: user-2
content: 引用 13 楼 Drowning soul 的回复:[quote=引用 12 楼 自信男孩 的回复：][quote=引用 11 楼 Drowning soul 的回复:] 测试部分，  定义数组char str_Dest[] = "ii";没有问题的，结果  但用指针是这样的， 把你的代码都贴出来，主要是main函数里调用的内容。[/quote]贴完了啊，{}这对括号不用贴了吧[/quote] 你的代码里str_dest是一个指针，指向的是只读的字符串，所以会出现段错误。另外，如果用数组，也要考虑目的字符数组的长度是否大于源串的长度。

user: user-3
content: 引用 13 楼 Drowning soul的回复:[quote=引用 12 楼 自信男孩 的回复：][quote=引用 11 楼 Drowning soul 的回复:] 测试部分，  定义数组char str_Dest[] = "ii";没有问题的，结果  但用指针是这样的， 把你的代码都贴出来，主要是main函数里调用的内容。[/quote]贴完了啊，{}这对括号不用贴了吧[/quote] 1、char型指针不会在结尾加一个'0'字符的，所以调用你的strcpy，那个while循环永远不会结束。

user: user-0
content: 引用 12 楼 自信男孩 的回复：[quote=引用 11 楼 Drowning soul 的回复:] 测试部分，  定义数组char str_Dest[] = "ii";没有问题的，结果  但用指针是这样的， 把你的代码都贴出来，主要是main函数里调用的内容。[/quote]贴完了啊，{}这对括号不用贴了吧

user: user-2
content: 引用 11 楼 Drowning soul 的回复:测试部分，  定义数组char str_Dest[] = "ii";没有问题的，结果  但用指针是这样的， 把你的代码都贴出来，主要是main函数里调用的内容。

user: user-0
content: 测试部分，  定义数组char str_Dest[] = "ii";没有问题的，结果  但用指针是这样的，

user: user-4
content: 对啊，还是发一个测试代码，才好找原因，不然只是猜测。 话说论坛支持呼叫大神吗？比如@赵4老师

user: user-0
content: 引用 3 楼 自信男孩 的回复：为什么要判断strDest的，另外，strcpy是不关系dest串是否空间足够，这个是需要调用者注意的，而不应该在strcpy中去检查。  如果strcpy的两个实参是这样的：  char dest[10], src[] = "helloworld";  mystrcpy(dest, src); 那么这个函数就不能正常运行了，因为dest是一个数组，元素都是随机值，所以无法判断是不是为'\0'。  while(*strSrc != '\0') { *strDest++ = *strSrc++; } /* if(*strDest == '\0') { printf("strDest空间不足！！\n"); return NULL; } */  改一下如果传数组名的话，会提示类型不兼容

user: user-0
content: 如果传数组名的话，会提示类型不兼容

user: user-2
content: 为什么要判断strDest的，另外，strcpy是不关系dest串是否空间足够，这个是需要调用者注意的，而不应该在strcpy中去检查。  如果strcpy的两个实参是这样的：  char dest[10], src[] = "helloworld";  mystrcpy(dest, src); 那么这个函数就不能正常运行了，因为dest是一个数组，元素都是随机值，所以无法判断是不是为'\0'。  while(*strSrc != '\0') { *strDest++ = *strSrc++; } /* if(*strDest == '\0') { printf("strDest空间不足！！\n"); return NULL; } */  改一下

user: user-5
content: while(*strDest != '\0' && *strSrc != '\0') 逻辑上 不用判断 *strDest 是不是字符串结尾  另外你的问题看起来和这段代码没关系 主要原因是你调用这个函数的时候写错  你怎么调用这个函数 代码贴出来

user: user-4
content: strDest或strSrc结尾不是'\0'一定会溢出。 另外判断空间不足，还要额外判断*strSrc != '\0'

user: user-2
content: 引用 6 楼 Jason_1566 的回复:[quote=引用 2 楼 user-5 的回复：]while(*strDest != '\0' && *strSrc != '\0') 逻辑上 不用判断 *strDest 是不是字符串结尾  另外你的问题看起来和这段代码没关系 主要原因是你调用这个函数的时候写错  你怎么调用这个函数 代码贴出来调用这边是这样的，char *dest = “ii”; char *src = “avid”; dest = strcpy(dest, src);    这样有两个问题，第一dest不能定义为指针类型，会报类型不兼容的错，只能定义为数组，不知道为什么？第二是楼上我说的那个类型不兼容是因为我改成数组后下面接strcpy()返回值，换一个char*的变量接就行了。所以现在还有不明白是第一个。？[/quote] 不应该提示类型不匹配的问题，因为实参是数组，但是形参是指针，况且，你传的是数组名，又不是数组元素，你该不会传的是数组元素吧。  建议把你的测试用例发一下，看看是什么原因提示类型不兼容

user: user-2
content: 引用 4 楼 Jason_1566 的回复:如果传数组名的话，会提示类型不兼容 贴出告警或错误信息看一下

user: user-5
content: 引用 6 楼 Jason_1566 的回复:[quote=引用 2 楼 user-5 的回复：]while(*strDest != '\0' && *strSrc != '\0') 逻辑上 不用判断 *strDest 是不是字符串结尾  另外你的问题看起来和这段代码没关系 主要原因是你调用这个函数的时候写错  你怎么调用这个函数 代码贴出来调用这边是这样的，char *dest = “ii”; char *src = “avid”; dest = strcpy(dest, src);    这样有两个问题，第一dest不能定义为指针类型，会报类型不兼容的错，只能定义为数组，不知道为什么？第二是楼上我说的那个类型不兼容是因为我改成数组后下面接strcpy()返回值，换一个char*的变量接就行了。所以现在还有不明白是第一个。？[/quote] "ii"是字符串常量 你的函数会修改dest指向的数据 常量不能修改所以错了  你所谓的 不能定义为指针类型是怎么回事 你怎么定义 报告什么错误  都截图贴出来看看

user: user-0
content: 引用 2 楼 user-5 的回复：while(*strDest != '\0' && *strSrc != '\0') 逻辑上 不用判断 *strDest 是不是字符串结尾  另外你的问题看起来和这段代码没关系 主要原因是你调用这个函数的时候写错  你怎么调用这个函数 代码贴出来调用这边是这样的，char *dest = “ii”; char *src = “avid”; dest = strcpy(dest, src);    这样有两个问题，第一dest不能定义为指针类型，会报类型不兼容的错，只能定义为数组，不知道为什么？第二是楼上我说的那个类型不兼容是因为我改成数组后下面接strcpy()返回值，换一个char*的变量接就行了。所以现在还有不明白是第一个。？