tri*_*ker 3 c c++ heap pointers
如标题中所述,目标是在不使用任何标准库函数或下标的情况下将C样式字符串复制到内存中.
这是我到目前为止[求助]
#include "std_lib_facilities.h"
char* strdup(const char* p)
{
int count = 0;
while (p[count]) ++count;
char* q = new char[count+1];
for (int i = 0; i < count + 1; ++i) *(q + i) = *(p + i);
}
int main()
{
char word[] = "Happy";
char* heap_str = strdup(word);
}
Run Code Online (Sandbox Code Playgroud)
显然问题是分配just *p(相当于p[0])只将字母分配"H"给内存.我不知道如何在没有下标或STL函数的情况下分配C风格的字符串.
C风格的字符串以'\ 0'结尾.你需要逐个遍历函数中的字符串,直到你遇到'\ 0'来知道它有多长.(这实际上是通过调用strlen()来完成的.)一旦你知道字符串有多长,就可以分配适当的内存量,即长度+ 1(因为'\ 0' ").
要访问数组p的第i个元素,可以使用下标:p[i].
表格的下标通过C标准(C99的6.5.2.1)和C++标准(C99的5.2.1)p[i]正式定义*((p)+(i)).这里是T的类型指针之一p或者i是,而另一个是整数类型(或C++中的枚举).因为数组名称被自动转换(在大多数使用类型中)到指向所述数组的第一个元素的指针,p[i]因此是数组p的第i个元素.
和基本算术一样,((p)+(i))相当于((i)+(p))指针算术.这个意思*((p)+(i))相当于*((i)+(p)).这也意味着p[i]相当于i[p].