指针被分配了相同的内存空间

Pointers getting allocated the same memory space

本文关键字:内存 空间 分配 指针      更新时间:2023-10-16

我正在用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)

要解决此问题,您有三个选项:

  1. 您编写函数的方式可以确保正确操作,而与两个字符串是否重叠无关。这可能涉及一个临时缓冲区。

  2. 您在函数声明中记录了函数无法正确处理重叠缓冲区,并确保调用代码没有违反此限制。在这种情况下,您可以考虑将restrict关键字添加到函数参数中,以向程序员和编译器记录这一假设(编译器将能够进行额外的优化。插入一个检查重叠条件的assert()也是一个好主意。

  3. 相反,将函数签名更改为void takeword (char *string),并记录它将把第一个单词移动到字符串的开头,并添加一个终止的null字符。

在您的情况下,由您决定您喜欢哪种解决方案,这完全取决于手头的用例。