gpt4 book ai didi

c++ - 将指针中的值存储为数组 - C++

转载 作者:行者123 更新时间:2023-11-28 00:37:00 27 4
gpt4 key购买 nike

我正在尝试在 C++ 中创建类似 strcpy 的函数。由于我们导师的限制,我不能使用内置的 string.h 函数。我做了以下功能:

    int strlen (char* string)
{
int len = 0;
while (string [len] != (char)0) len ++;
return len;
}

char* strcpy (char* *string1, char* string2)
{
for (int i = 0; i<strlen (string2); i++) *string1[i] = string2[i];
return *string1;
}
main()
{
char* i = "Farid";
strcpy (&i, "ABC ");
cout<<i;
}

但我无法设置 *string1 [i] 值。当我尝试这样做时,屏幕上出现错误“程序遇到问题,需要关闭”。

我应该怎么做才能解决这个问题?

最佳答案

您的strcpy 函数有误。当您编写 *string1[i] 时,您实际上是在修改一个虚构的字符串数组的第 i 个元素的第一个字符。该内存位置不存在,您的程序出现段错误。

改为这样做:

char* strcpy (char* string1, char* string2)
{
for (int i = 0; i<strlen (string2); i++) string1[i] = string2[i];
return string1;
}

如果你传递一个 char* 字符已经是可修改的。注意 调用者有责任分配内存来保存拷贝。和声明:

char* i = "Farid";

不是有效分配,因为 i 指针可能指向只读内存。改为:

char i[100] = "Farid";

现在 i 拥有 100 个字符的本地内存,有足够的空间供您复制:

strcpy(i, "ABC ");

如果你想让这个函数分配内存,那么你应该创建另一个,比如strdup():

char* strdup (char* string)
{
size_t len = strlen(string);
char *n = malloc(len);
if (!n)
return 0;
strcpy(n, string);
return n;
}

现在,使用这个函数,调用者有责任释放内存:

char *i = strdup("ABC ");
//use i
free(i);

关于c++ - 将指针中的值存储为数组 - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20530879/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com