指针被分配了相同的内存空间
Pointers getting allocated the same memory space
我正在用C++编写一个程序,该程序使用以下函数,该函数有两个字符指针(当然,充当字符串)作为其形式参数:
void takeword (char *dstr, const char *from)
{
int i=0, j=0;
printf ("n %s", dstr);
getch();
exit(0);
while (!isalpha(from[i])) //positioning to the first letter in te line
i++;
do
{
dstr[j]=from[i];
j++;
i++;
}while (isalpha(from[i]));
dstr[j]=' '; //terminating the word with a null character
};
我的问题是,dstr和from这两个字符串被分配了相同的内存空间
因此,dstr中所做的更改反映在我不想要的内容中。
那么,如何确保它们被分配到不同的内存位置呢?
您给出的代码不能以令人满意的方式处理的唯一情况是dstr > from && dstr < from + strlen(from)
。
要解决此问题,您有三个选项:
-
您编写函数的方式可以确保正确操作,而与两个字符串是否重叠无关。这可能涉及一个临时缓冲区。
-
您在函数声明中记录了函数无法正确处理重叠缓冲区,并确保调用代码没有违反此限制。在这种情况下,您可以考虑将
restrict
关键字添加到函数参数中,以向程序员和编译器记录这一假设(编译器将能够进行额外的优化。插入一个检查重叠条件的assert()
也是一个好主意。 -
相反,将函数签名更改为
void takeword (char *string)
,并记录它将把第一个单词移动到字符串的开头,并添加一个终止的null字符。
在您的情况下,由您决定您喜欢哪种解决方案,这完全取决于手头的用例。
相关文章:
- 当注入程序的内存空间时,如何读取从 0 到 0xFFFFFFFFF 的每个字节?我正在创建模式扫描仪
- 为什么不同的翻译单元没有独立和沙盒的内存空间?
- 我的boost managed_shared_memory在离开作用域时似乎不会从内存空间中取消映射
- 是否可以在专用内存空间中分配一个为提升管理共享内存而创建的对象
- 为什么我只能在 4 GB 的虚拟内存空间上分配 2 GB?
- OPENCL-如何使辅助功能返回阵列并将内存的部分从恒定内存空间转移到私有
- 为多维数组创建内存空间
- 将节点添加到链接列表中,而无需明确分配内存空间(无需使用新)
- 内存空间的反转方向?
- 打开文件*以增加内存空间
- 为什么堆栈中的函数局部变量之间存在内存空间
- 只有当声明一个对象时,内存空间才会分配给类的数据成员,那么为什么 Sizeof(class_name) 给我结果
- 何时分配C++类的成员函数的内存空间
- 使用free()释放new分配的内存空间
- 共享内存空间可以将数据(非POD)发送到另一个共享内存吗?
- 删除内存空间后,指针的值保持不变还是更改?对象内容是否将被更改
- 如何在分配更多内存空间之前检查指针是否为 NULL
- 需要析构函数来释放内存空间,即使所有项目都已弹出
- 数组的指针,该数组的每个元素的内存空间信息存储在哪里
- C++内存空间