将值作为数组存储在指针中-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()
不会添加空终止符该守则有几个问题:
char*
,因为字符串文字的类型为char const[N]
(适用于N
)