可能是重复问题:
局部变量的内存可以在其作用域外被访问吗?
这里有一个简单的 C++ 函数。它接受一个字符数组和一个整数 n 作为参数,然后创建一个新的只包含数组前 n 个元素的字符数组。
char * cutString(char * ch , int n){
char * p = new char[n];
int i ;
for(i = 0 ; i < n ; i++)
p[i] = ch[i];
while(i <= n ){
p[i++] = '\0';
}
return p ;
}
这段代码原本没问题,但如果我把char * p = new char[n];
改成char p[n];
后,会出现奇怪的字符。发生了什么?前者和后者有什么区别?另外,变量p是临时变量;函数如何成功返回它呢?
char* c
是以空字符结尾的字符串,就没有理由添加第二个空字符。当i == n
时,for
循环终止,所以while循环总是会开始。while循环在将null字符添加到p[i](实际上是p[n]
)之前进行递增。p[n]超出了数组分配的大小。你要么在顶部说p = new char[n + 1]
,要么用if (p[n - 1] != '\0') p[n - 1] = '\0';
替换while循环,或者在一开始就说if (ch[n] != '\0') return 0
。我不知道对于你的使用模型什么是适当的。 - GlenPeterson