将值作为数组存储在指针中-C++; 我试图在C++中实现一个函数,比如 StrucP。由于讲师的限制,我无法使用内置的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; } int strlen(字符*字符串) { int len=0; while(string[len]!=(char)0)len++; 回程透镜; } char*strcpy(char**string1,char*string2) { 对于(int i=0;i

将值作为数组存储在指针中-C++; 我试图在C++中实现一个函数,比如 StrucP。由于讲师的限制,我无法使用内置的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; } int strlen(字符*字符串) { int len=0; while(string[len]!=(char)0)len++; 回程透镜; } char*strcpy(char**string1,char*string2) { 对于(int i=0;i,c++,pointers,C++,Pointers,您的strcpy函数是错误的。当您编写*string1[i]时,您实际上是在修改一个虚构字符串数组的第i个元素的第一个字符。该内存位置不存在,并且您的程序出现故障 改为这样做: char* strcpy (char* string1, char* string2) { for (int i = 0; i<strlen (string2); i++) string1[i] = string2[i]; return 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;
}
不是有效的分配,因为
i
指针可能指向只读内存。请改为:

char i[100] = "Farid";
现在
i
拥有100个字符的本地内存,为您的副本提供了足够的空间:

strcpy(i, "ABC ");
如果希望此函数分配内存,则应创建另一个函数,例如
strdup()

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

char *i = strdup("ABC ");
//use i
free(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;
}
不是有效的分配,因为
i
指针可能指向只读内存。请改为:

char i[100] = "Farid";
现在
i
拥有100个字符的本地内存,为您的副本提供了足够的空间:

strcpy(i, "ABC ");
如果希望此函数分配内存,则应创建另一个函数,例如
strdup()

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

char *i = strdup("ABC ");
//use i
free(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;
}
不是有效的分配,因为
i
指针可能指向只读内存。请改为:

char i[100] = "Farid";
现在
i
拥有100个字符的本地内存,为您的副本提供了足够的空间:

strcpy(i, "ABC ");
如果希望此函数分配内存,则应创建另一个函数,例如
strdup()

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

char *i = strdup("ABC ");
//use i
free(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;
}
不是有效的分配,因为
i
指针可能指向只读内存。请改为:

char i[100] = "Farid";
现在
i
拥有100个字符的本地内存,为您的副本提供了足够的空间:

strcpy(i, "ABC ");
如果希望此函数分配内存,则应创建另一个函数,例如
strdup()

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

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

因为strcpy声明中出现了这个错误:“char**string1”

我不认为您的意思是string1是指向char的指针


删除其中一个*should单词

,因为strcpy声明中出现以下错误:“char**string1”

我不认为您的意思是string1是指向char的指针


删除其中一个*should单词

,因为strcpy声明中出现以下错误:“char**string1”

我不认为您的意思是string1是指向char的指针


删除其中一个*should单词

,因为strcpy声明中出现以下错误:“char**string1”

我不认为您的意思是string1是指向char的指针


删除其中一个*should word

该代码有几个问题:

  • 您无法将字符串文字分配给
    char*
    ,因为字符串文字的类型为
    char const[N]
    (适用于
    N
    )它转换为
    char-const*
    ,但不转换为
    char*
    。在C++03中,为了向后兼容,可以转换为
    char*
    ,但是这个规则现在已经不存在了。也就是说,您的
    i
    需要声明为
    char-const*
    。如上所述,您的代码尝试编写只读内存,该内存将具有undesi难以估量的影响
  • std::strcpy()
    的声明采用
    char*
    char const*
    :对于第一个指针,您需要提供足够的空间来容纳第二个参数的字符串。因为这很容易出错,所以使用
    strcpy()是个坏主意
    首先!相反,您希望复制以第一个缓冲区的长度作为第三个参数的
    std::strncpy()
    (实际上,我不确定
    std::strncpy()
    是否保证零终止;您肯定也希望保证零终止)
  • 在循环条件中使用
    strlen()。二次复杂度非常糟糕。复制一个1000个字符的字符串需要1000000次操作。如果要尝试此效果,请使用线性和二次算法复制一个1000000个字符的字符串
  • strcpy()
    不会添加空终止符
  • 在C++中(C中的1990),隐式<代码> int <代码>规则不适用。也就是说,你确实需要在主()/<代码>前面写<代码> int >代码>

  • 该守则有几个问题:

  • 您无法将字符串文字分配给
    char*
    ,因为字符串文字的类型为
    char const[N]
    (适用于
    N