玩char数组

use*_*008 1 c++ arrays char garbage

做这样的事情是否安全:

char* charArray = new char[10];  
strcat(charArray, "qwertyuiop");  
charArray[3] = '\0';  
delete [] charArray;
Run Code Online (Sandbox Code Playgroud)

一切都会被删除吗?或者之后的事情\0不会是什么?我不知道我是否要离开垃圾.

编辑:应该是 strcpy

das*_*ght 7

除了new[]POD类型没有对数组进行零初始化以及strcat将终止写入'\0'已分配区域末尾的事实之外,一切看起来都很好:特别是,delete将删除整个块.

写入已分配块结束的原因是10个字符的字符串"qwertyuiop"需要11个字节来存储.


Naw*_*waz 5

如果你想写strcpy而不是strcat,那么这是安全和正确的.但似乎你对此有一种误解delete [] charArray.它不会删除字符,它会删除指向的内存charArray.即使之后内存delete [] charArray 可能包含这些字符,但不能保证.

但是,如果你真的想写strcat,并且它不是拼写错误,那么你的代码会调用未定义的行为,因为charArray包含strcat将尝试连接第二个字符串的垃圾.