C++ C++;递增字符时会发生什么*

C++ C++;递增字符时会发生什么*,c++,variables,pointers,strlen,C++,Variables,Pointers,Strlen,假设我有以下代码: void incrementPointer( const char *x) { char *localVar = new char; char *localVarPtr = localVar; while(*xPtr != '\0') { xPtr++; localVarPtr++; } } 假设x指向以空结尾的单词。执行while循环后,localVarPtr是否指向尚未分配给localVar的位置?例如,

假设我有以下代码:

void incrementPointer( const char *x) {

    char *localVar = new char;
    char *localVarPtr = localVar;
    while(*xPtr != '\0') {
        xPtr++;
        localVarPtr++;
    }
}
假设x指向以空结尾的单词。执行while循环后,localVarPtr是否指向尚未分配给localVar的位置?例如,如果我在此函数中声明其他变量,然后将localVar和localVarPtr之间的所有字节设置为字符“c”,这是否可能覆盖其他变量的值

我的另一个问题是,如果这被认为是不好的做法(即可能覆盖变量或导致未定义的行为),那么如果x指向一个大小为无限的单词,那么如何为localVar分配足够的空间呢?x的大小可能大于无符号整数,因此我无法在localVar的初始化中使用该大小

假设x指向以空结尾的单词。执行while循环后,localVarPtr是否指向尚未分配给localVar的位置

这完全取决于x的长度——例如,如果x只包含null终止符,则不包含,localVarPtr的值指向new分配的区域的开头

例如,如果我在此函数中声明其他变量,然后将localVar和localVarPtr之间的所有字节设置为字符“c”,这是否可能覆盖其他变量的值

您没有改变存储在任何地址中的内存,因此不会发生覆盖。如果localVarPtr指向地址0x8000处的区域,然后修改0x8010,假设0x0810是“局部变量”,则是,其内容将更改。这是wild west,任何解除引用并分配给的有效(有时无效)地址都将更改或发出信号

我的另一个问题是,这是否被视为不良做法(即可能覆盖变量或导致未定义的行为)

是的,通常指向或修改未定义的内存是不好的做法。然而,一个指向局部变量的指针,故意这样设置,是非常好的。不明确的行为总是坏习惯

如果x指向一个大小不受限制的单词,那么为localVar分配足够空间的方法是什么?x的大小可能大于无符号整数,因此我无法在localVar的初始化中使用该大小


正如Mat所指出的,没有这样的方法来拥有“无限”长度的字符串。如果需要分配空间以匹配x的字符串大小,则只需通过调用函数来确定其长度,或者将其传递给此函数来了解大小。一旦您知道了大小,就可以使用new来分配。

在哪里可以买到内存无限的电脑?圣诞节我没有得到一个:-(代码应该做什么?