【发布时间】:2020-08-16 17:23:41
【问题描述】:
我的任务是这样的:我应该在以下约束下实现strcpy函数:
- 函数应使用指针表达式 (
*(d+i)) - 我应该不使用
<string.h>来实现它
我正在使用 Visual Studio 2019 进行编程。 我在谷歌搜索了一些源代码并运行它们,但我的程序有一个逻辑错误。程序立即结束,每次。我不知道我做错了什么。 这是我在 Windows 上的 Visual Studio 2019 中的代码。请告诉我有什么问题。
#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';
}
【问题讨论】:
-
嗯...
sen1和sen2指向什么可写 存储? (或者它们只是初始化指向不可修改的 String Literals 的指针?)为什么不呢,例如char sen1[64] = "Hello"; char sen2[64] = "Friends";所以两者都被声明为 arrays? -
程序没有扫描字符串并分配sen1和sen2。所以我为他们设置了字符串文字。 (而且我英文不太好……所以请理解!)
-
当然,您可以使用字符串文字模拟您的 source (
sen2) 字符串以进行测试,但您的sen1指针必须指向您可以使用的有效存储写入(就像一个足够长的字符数组以容纳sen1(加上 nul 终止字符)。 -
我相信这个问题与strcpy using pointers重复
-
@Abra 差不多,但不完全。我相信,关于避免索引和使用 ptr+offset 表示法的要求使其完全不同。