我的任务如下:我应该在以下约束下实现strcpy函数:
函数应该使用指针表达式,(*(d+i))
<string.h>实现它
我正在用Visual 2019年编程。我在google中搜索了一些源代码并运行它们,但是我的程序有一个逻辑错误。每次节目马上结束。我不知道我做错了什么。下面是我在Windows上的VisualStudio2019代码。请告诉我怎么回事。
#include <stdio.h>
void strcpy(char*, char*);
int main()
{
char* sen1 = "Hello";
char* sen2 = "Friends";
strcpy(sen1, sen2);
printf("The result: %s\n", sen1);
return 0;
}
void strcpy(char* str1, char* str2)
{
int i = 0;
while (*(str2 + i) != '\0')
{
*(str1 + i) = *(str2 + i);
i++;
}
*(str1 + i) = '\0';
}发布于 2020-05-02 07:48:06
除了需要为sen1提供可写存储之外,还应该在取消引用str2之前检查以确保函数中的str2 != NULL (否则,即使您修复了所有其他错误-可能会导致分段错误)。
例如,在您的代码中,您可以定义一个常量,用于设置sen1数组的大小(或者可以使用malloc()、calloc()或realloc()分配存储-以后再使用)。使用你可以做的数组。
#include <stdio.h>
#include <stdlib.h>
#define MAXC 64 /* if you need a constant, #define one (or more) */
...
int main (void)
{
char sen1[MAXC] = "Hello";
char *sen2 = "Friends";
mystrcpy (sen1, sen2);
printf ("The result: %s\n", sen1);
}在您的strcpy函数中,在您的函数中使用str2之前,检查str2不是NULL。
char *mystrcpy (char *dest, const char *src)
{
char *p = dest;
if (!src || !dest) { /* ensure src or dest is not NULL */
fputs ("error: src or dest parameters NULL in mystrcpy().\n", stderr);
exit (EXIT_FAILURE);
}
do /* loop */
*p++ = *src; /* copy each char in src to dest */
while (*src++); /* (including the nul-termianting char) */
return dest; /* return pointer to dest */
}现在,您将在(重命名的) mystrcpy()函数中将源字符串复制到目标字符串,接收预期的结果:
示例使用/输出
$ ./bin/mystrcpy
The result: Friends仔细考虑一下,如果你还有其他问题,请告诉我。
发布于 2020-05-02 07:23:26
至少有两个问题:
strcpy。使用另一个名称.至少有三个清晰的代码问题:
为了使其正确,typed.
str1和str2都是泛型名称,int main()转换为int main(void)。它们没有指示哪个是源,哪个是目标指针。my_strcpy(char *dest, char *src)size_t i作为索引计数器而不是int,因为这是类型所有的字符串长度函数和sizeof操作符返回。它也是一个无符号类型,可以复制非常长的字符串:-) #include <stddef.h>.之后可以使用size_t
发布于 2020-05-02 07:35:41
你想要这个
...
char* source = "Hello";
// or char source[] = "Hello";
char destination[1000]; // destination buffer long enough for playing around
my_strcpy(destination, source);
printf("%s\n", destination); // should print "Hello" if my_strcpy is corect
...其余的请读詹斯的答案。
https://stackoverflow.com/questions/61555728
复制相似问题