C++ 数组为多于请求的元素分配空间
当我执行以下代码时,c_copy初始化的元素比sz指定的元素多,是什么导致了这种行为?我认为这可能是因为数组需要一个常量值,但在方法内部或外部声明一个常量值并没有帮助C++ 数组为多于请求的元素分配空间,c++,C++,当我执行以下代码时,c_copy初始化的元素比sz指定的元素多,是什么导致了这种行为?我认为这可能是因为数组需要一个常量值,但在方法内部或外部声明一个常量值并没有帮助 char* e4_strdup( const char*& c ) { unsigned int sz{ 0 }; for ( const char* p_to_c = c; *p_to_c != '\0'; ++p_to_c ) ++sz; char* c_copy{ new c
char* e4_strdup( const char*& c )
{
unsigned int sz{ 0 };
for ( const char* p_to_c = c; *p_to_c != '\0'; ++p_to_c )
++sz;
char* c_copy{ new char[ sz ] };
for ( unsigned int i{ 0 }; i < sz; ++i )
c_copy[ i ] = c[ i ];
return c_copy;
}
char*e4\u strdup(const char*&c)
{
无符号整数sz{0};
for(const char*p_to_c=c;*p_to_c!='\0';++p_to_c)
++深圳;
char*c_copy{new char[sz]};
for(无符号整数i{0};i
编辑1:
我通过单步执行程序来确定分配的元素数量
另外,当我通过std::cout输出返回的指针时,它打印的比原始输入的c字符串多
编辑2:
固定代码
char* e4_strdup( const char*& c )
{
unsigned int sz{ 0 };
for ( const char* p_to_c = c; *p_to_c != '\0'; ++p_to_c )
++sz;
char* c_copy{ new char[ ++sz ] }; // extra space for '\0' character.
for ( unsigned int i{ 0 }; i < sz; ++i )
c_copy[ i ] = c[ i ];
return c_copy;
}
char*e4\u strdup(const char*&c)
{
无符号整数sz{0};
for(const char*p_to_c=c;*p_to_c!='\0';++p_to_c)
++深圳;
char*c_copy{new char[++sz]};//为'\0'字符留出额外空间。
for(无符号整数i{0};i
它没有分配更多的空间-您只是无法复制尾随的\0
,因此当您打印字符串时,它将继续超过您正式分配的末尾。欢迎来到未定义行为的世界
另外,在复制尾随的
\0
之前,您需要为尾随的\0
分配空间,您也没有这样做。您如何确定分配的元素数?为什么不std::vector
和std::copy?
呢?因为这是指针的练习。现在您已经告诉我了,这一点很明显。非常感谢。