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

时间:2014-04-21 18:11:10

标签: c++

我正在用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]='\0';                   //terminating the word with a null character
};

我的问题是两个字符串dstr和from被分配了相同的内存空间 因此,在dstr中进行的更改正在反映在我不想要的内容中。

那么,如何确保为它们分配不同的内存位置呢?

1 个答案:

答案 0 :(得分:0)

您提供的代码无法以令人满意的方式处理的唯一情况是dstr > from && dstr < from + strlen(from)

要解决此问题,您有三种选择:

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

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

  3. 你走向相反的方向并将函数签名更改为assert()并记录它将第一个单词移动到字符串的开头并添加一个终止空字符。

    < / LI>

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