c++delete和delete[]区别
很多书上都直接说用new申请就用delete释放,用new[]就用delete[]释放,具体原因没有写的太清楚,今天仔细搜索了下关于这两个用法的区别,觉得说的比较好容易理解的是下面的两位链接:
http://anwj336.blog.163.com/blog/static/8941520920106795122306/
http://shokey520.ycool.com/post.4374798.html
http://anwj336.blog.163.com/blog/static/8941520920106795122306/
http://shokey520.ycool.com/post.4374798.html
c++程序设计书籍
C++程序设计谭浩强 比较不错 适合入门
http://wenku.baidu.com/view/8dc3d27602768e9951e738d6.html
http://wenku.baidu.com/view/8dc3d27602768e9951e738d6.html
extern C详解
觉得不错的文章:http://www.cppblog.com/Macaulish/archive/2008/06/17/53689.html
javascript检查日期格式mark下
<pre code_snippet_id="145607" snippet_file_name="blog_20140107_3_8874783" name="code" class="javascript"><script language=jscript>
function dateValidationCheck(str){
var re = new RegExp("^([0-9]{4})[./]{1}([0-9]{1,2})[./]{1}([0-9]{1,2})$");
var strDataValue;
var infoValidation = true;
if ((strDataValue = re.exec(str)) != null){
var i;
i = parseFloat(strDataValue[1]);
if (i <= 0 || i > 9999){ // 年
infoValidation = false;
}
i = parseFloat(strDataValue[2]);
if (i <= 0 || i > 12){ // 月
infoValidation = false;
}
i = parseFloat(strDataValue[3]);
if (i <= 0 || i > 31){ // 日
infoValidation = false;
}
}else{
infoValidation = false;
}
if (!infoValidation){
alert('請輸入 YYYY/MM/DD 日期格式');
}
return infoValidation;
}
</script></pre><br>
<br>
<p></p>
<pre></pre>
<pre code_snippet_id="145607" snippet_file_name="blog_20140107_4_1001355" name="code" class="html"><pre code_snippet_id="145607" snippet_file_name="blog_20140107_4_1001355" name="code" class="javascript">function IsInt(v)
{
var vArr = v.match(/^[0-9]+$/);
if (vArr == null)
{
return false;
} else {
return true;
}
}</pre><pre code_snippet_id="145607" snippet_file_name="blog_20140107_5_9191211" name="code" class="html">日期时间</pre><pre code_snippet_id="145607" snippet_file_name="blog_20140107_6_3269630" name="code" class="html"><pre code_snippet_id="145607" snippet_file_name="blog_20140107_6_3269630" name="code" class="javascript">function check(){
str = form1.txt.value;
str = str.match(/^(\d{1,2})(:)?(\d{1,2})\2(\d{1,2})$/);
if (str == null){
alert('你输入的时间格式无效');
return false;
}else if (str[1]>23 || str[3]>59 || str[4]>59){
alert("你输入的时间格式无效");
return false
}else{
alert("你输入的时间格式有效");
return true;
}
}</pre><br>
<pre></pre>
<br>
2比较全的
<pre></pre>
<pre code_snippet_id="145607" snippet_file_name="blog_20140107_7_7555791" name="code" class="html">日期<pre code_snippet_id="145607" snippet_file_name="blog_20140107_7_7555791" name="code" class="javascript">//用于日期的文本框 name = "indate"
function check1(Form)
{
for (i = 0; i < Form.length; i++)
{
if (Form.elements[i].value == "")
{
alert("请填写完整!")
Form.elements[i].focus();
return;
}
if (Form.elements[i].name == "indate")
{
var date = Form.elements[i].value;
len = date.length;
var datearray = date.split("-")
//alert(datearray[1]);
var year = parseInt(datearray[0]);
var month = parseInt(datearray[1]);
var day = parseInt(datearray[2]);
if (len == "")
{
alert("时间不能为空");
return;
}
else if (len > 10)
{
alert("日期格式不正确");
return;
}
else if (isNaN(year))
{
alert("日期格式不正确");
return;
}
else if ((year > 9999) || (year < 100))
{
alert("日期格式不正确");
return;
}
else if (isNaN(month))
{
alert("日期格式不正确");
return;
}
else if ((month > 12) || (month < 1))
{
alert("日期格式不正确");
return;
}
else if (isNaN(day))
{
alert("日期格式不正确");
return;
}
else
{
switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if ((dat < 0) || (day > 31))
{
alert("日期格式不正确");
return;
}
break;
case 4:
case 6:
case 9:
case 11:
if ((day < 0) || (day > 30))
{
alert("日期格式不正确");
return;
}
break;
default:
if ((year % 100 == 0) && (year % 4 == 0))
{
if ((day < 0) || (day > 29))
{
alert("日期格式不正确");
return;
}
}
else
{
if ((day < 0) || (day > 28))
{
alert("日期格式不正确");
return;
}
}
}
}
}
}
Form.submit();
}</pre><br>
<pre></pre>
<pre code_snippet_id="145607" snippet_file_name="blog_20140107_8_8253902" name="code" class="html">时间类似</pre><pre code_snippet_id="145607" snippet_file_name="blog_20140107_12_489941" name="code" class="html"></pre><pre code_snippet_id="145607" snippet_file_name="blog_20140107_10_6585462" name="code" class="html">3 正则表达式</pre><pre code_snippet_id="145607" snippet_file_name="blog_20140107_11_9235421" name="code" class="html"><pre code_snippet_id="145607" snippet_file_name="blog_20140107_11_9235421" name="code" class="javascript">js正则验证日期时间:
var reDateTime = /^(?:19|20)[0-9][0-9]-(?:(?:0[1-9])|(?:1[0-2]))-(?:(?:[0-2][1-9])|(?:[1-3][0-1])) (?:(?:[0-2][0-3])|(?:[0-1][0-9])):[0-5][0-9]:[0-5][0-9]$/;
var isDateTime = reDateTime.test('2012-01-31 09:00:22');
js正则表达式只验证日期部分:
function isValidDate(val) {
//var datePattern = /^\d{4}-\d{1,2}-\d{1,2}$/;
var datePattern = /^(?:19|20)[0-9][0-9]-(?:(?:0[1-9])|(?:1[0-2]))-(?:(?:[0-2][1-9])|(?:[1-3][0-1]))$/;
return datePattern.test(val);
}
js正则表达式验证时间部分:
function isValidTime(val) {
var datePattern = /^(?:(?:[0-2][0-3])|(?:[0-1][0-9])):[0-5][0-9]:[0-5][0-9]$/;
return datePattern.test(val);
}</pre><br>
<br>
<pre></pre>
<p></p>
<p></p><pre code_snippet_id="145607" snippet_file_name="blog_20140107_12_489941" name="code" class="html"></pre><p></p>
<div style="padding-top:20px">
<p style="font-size:12px;">版权声明:本文为博主原创文章,未经博主允许不得转载。</p>
</div>
</pre></pre></pre></pre>
function dateValidationCheck(str){
var re = new RegExp("^([0-9]{4})[./]{1}([0-9]{1,2})[./]{1}([0-9]{1,2})$");
var strDataValue;
var infoValidation = true;
if ((strDataValue = re.exec(str)) != null){
var i;
i = parseFloat(strDataValue[1]);
if (i <= 0 || i > 9999){ // 年
infoValidation = false;
}
i = parseFloat(strDataValue[2]);
if (i <= 0 || i > 12){ // 月
infoValidation = false;
}
i = parseFloat(strDataValue[3]);
if (i <= 0 || i > 31){ // 日
infoValidation = false;
}
}else{
infoValidation = false;
}
if (!infoValidation){
alert('請輸入 YYYY/MM/DD 日期格式');
}
return infoValidation;
}
</script></pre><br>
<br>
<p></p>
<pre></pre>
<pre code_snippet_id="145607" snippet_file_name="blog_20140107_4_1001355" name="code" class="html"><pre code_snippet_id="145607" snippet_file_name="blog_20140107_4_1001355" name="code" class="javascript">function IsInt(v)
{
var vArr = v.match(/^[0-9]+$/);
if (vArr == null)
{
return false;
} else {
return true;
}
}</pre><pre code_snippet_id="145607" snippet_file_name="blog_20140107_5_9191211" name="code" class="html">日期时间</pre><pre code_snippet_id="145607" snippet_file_name="blog_20140107_6_3269630" name="code" class="html"><pre code_snippet_id="145607" snippet_file_name="blog_20140107_6_3269630" name="code" class="javascript">function check(){
str = form1.txt.value;
str = str.match(/^(\d{1,2})(:)?(\d{1,2})\2(\d{1,2})$/);
if (str == null){
alert('你输入的时间格式无效');
return false;
}else if (str[1]>23 || str[3]>59 || str[4]>59){
alert("你输入的时间格式无效");
return false
}else{
alert("你输入的时间格式有效");
return true;
}
}</pre><br>
<pre></pre>
<br>
2比较全的
<pre></pre>
<pre code_snippet_id="145607" snippet_file_name="blog_20140107_7_7555791" name="code" class="html">日期<pre code_snippet_id="145607" snippet_file_name="blog_20140107_7_7555791" name="code" class="javascript">//用于日期的文本框 name = "indate"
function check1(Form)
{
for (i = 0; i < Form.length; i++)
{
if (Form.elements[i].value == "")
{
alert("请填写完整!")
Form.elements[i].focus();
return;
}
if (Form.elements[i].name == "indate")
{
var date = Form.elements[i].value;
len = date.length;
var datearray = date.split("-")
//alert(datearray[1]);
var year = parseInt(datearray[0]);
var month = parseInt(datearray[1]);
var day = parseInt(datearray[2]);
if (len == "")
{
alert("时间不能为空");
return;
}
else if (len > 10)
{
alert("日期格式不正确");
return;
}
else if (isNaN(year))
{
alert("日期格式不正确");
return;
}
else if ((year > 9999) || (year < 100))
{
alert("日期格式不正确");
return;
}
else if (isNaN(month))
{
alert("日期格式不正确");
return;
}
else if ((month > 12) || (month < 1))
{
alert("日期格式不正确");
return;
}
else if (isNaN(day))
{
alert("日期格式不正确");
return;
}
else
{
switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if ((dat < 0) || (day > 31))
{
alert("日期格式不正确");
return;
}
break;
case 4:
case 6:
case 9:
case 11:
if ((day < 0) || (day > 30))
{
alert("日期格式不正确");
return;
}
break;
default:
if ((year % 100 == 0) && (year % 4 == 0))
{
if ((day < 0) || (day > 29))
{
alert("日期格式不正确");
return;
}
}
else
{
if ((day < 0) || (day > 28))
{
alert("日期格式不正确");
return;
}
}
}
}
}
}
Form.submit();
}</pre><br>
<pre></pre>
<pre code_snippet_id="145607" snippet_file_name="blog_20140107_8_8253902" name="code" class="html">时间类似</pre><pre code_snippet_id="145607" snippet_file_name="blog_20140107_12_489941" name="code" class="html"></pre><pre code_snippet_id="145607" snippet_file_name="blog_20140107_10_6585462" name="code" class="html">3 正则表达式</pre><pre code_snippet_id="145607" snippet_file_name="blog_20140107_11_9235421" name="code" class="html"><pre code_snippet_id="145607" snippet_file_name="blog_20140107_11_9235421" name="code" class="javascript">js正则验证日期时间:
var reDateTime = /^(?:19|20)[0-9][0-9]-(?:(?:0[1-9])|(?:1[0-2]))-(?:(?:[0-2][1-9])|(?:[1-3][0-1])) (?:(?:[0-2][0-3])|(?:[0-1][0-9])):[0-5][0-9]:[0-5][0-9]$/;
var isDateTime = reDateTime.test('2012-01-31 09:00:22');
js正则表达式只验证日期部分:
function isValidDate(val) {
//var datePattern = /^\d{4}-\d{1,2}-\d{1,2}$/;
var datePattern = /^(?:19|20)[0-9][0-9]-(?:(?:0[1-9])|(?:1[0-2]))-(?:(?:[0-2][1-9])|(?:[1-3][0-1]))$/;
return datePattern.test(val);
}
js正则表达式验证时间部分:
function isValidTime(val) {
var datePattern = /^(?:(?:[0-2][0-3])|(?:[0-1][0-9])):[0-5][0-9]:[0-5][0-9]$/;
return datePattern.test(val);
}</pre><br>
<br>
<pre></pre>
<p></p>
<p></p><pre code_snippet_id="145607" snippet_file_name="blog_20140107_12_489941" name="code" class="html"></pre><p></p>
<div style="padding-top:20px">
<p style="font-size:12px;">版权声明:本文为博主原创文章,未经博主允许不得转载。</p>
</div>
</pre></pre></pre></pre>
lua string字符串固定格式字符大小写替换
突然一个功能需要用,就开始找资料做,基本能满足自己的功能,mark下
[javascript] view plaincopy在CODE上查看代码片派生到我的代码片
local tmp = "HELLO_WORLD_LUA"
local first = {}
local r_first = {}
while(1) do
i,j = string.find(tmp,"_%w")
if i == nil then
table.insert(r_first, string.lower(tmp))
break
end
if i ~= 0 and i~= 1 then
local r = string.sub(tmp, 1, i-1)
table.insert(r_first, string.lower(r))
end
tp = string.sub(tmp, i,j)
tmp = string.sub(tmp, j+1,-1)
table.insert(first, tp)
end
local str = ""
for i,char in pairs(first) do
str = str..r_first[i]..char
end
str = str..r_first[table.getn(r_first)]
print(str)
[javascript] view plaincopy在CODE上查看代码片派生到我的代码片
local tmp = "HELLO_WORLD_LUA"
local first = {}
local r_first = {}
while(1) do
i,j = string.find(tmp,"_%w")
if i == nil then
table.insert(r_first, string.lower(tmp))
break
end
if i ~= 0 and i~= 1 then
local r = string.sub(tmp, 1, i-1)
table.insert(r_first, string.lower(r))
end
tp = string.sub(tmp, i,j)
tmp = string.sub(tmp, j+1,-1)
table.insert(first, tp)
end
local str = ""
for i,char in pairs(first) do
str = str..r_first[i]..char
end
str = str..r_first[table.getn(r_first)]
print(str)
lua检测过滤字
几天弄lua过滤字,找了很多资料,都也有例子,但最后都不能满足我需要的(或许为了防懒人,不愿贴完整代码偷笑),还好,最终基本搞定或许方法比较丑但能用,mark下,欢迎给更好的方法!
因table里面塞满过滤字,关键是包括特殊字符,所以只能自己写函数check,不啰嗦贴代码。
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
local chars = {}
table.insert(chars, "%^")
table.insert(chars, "%$")
table.insert(chars, "%(")
table.insert(chars, "%)")
table.insert(chars, "%%")
table.insert(chars, "%.")
table.insert(chars, "%[")
table.insert(chars, "%]")
table.insert(chars, "%*")
table.insert(chars, "%+")
table.insert(chars, "%-")
table.insert(chars, "%?")
local function checkspecialcharacter()
for i, permitWord in pairs(filter_record) do
-- 检查是否是特殊字符替换掉
for m,char in pairs(chars) do
if string.find(permitWord, char) ~= nil then
permitWord = string.gsub(permitWord, char, "%%"..char)
end
end
filter_record[i]= permitWord
end
end
local function check(message)
-- 输入的字符要转义成安全的
message = string.format("%q", message)
for _, permitWord in pairs(filter_record) do
if string.find(message, permitWord) ~= nil then
message = string.gsub(message, permitWord, "**")
end
end
end
另,在过滤字table中,过滤顺序是以table顺序过滤,那后面的过滤字符如果含前面的过滤字符,就不匹配了
因table里面塞满过滤字,关键是包括特殊字符,所以只能自己写函数check,不啰嗦贴代码。
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
local chars = {}
table.insert(chars, "%^")
table.insert(chars, "%$")
table.insert(chars, "%(")
table.insert(chars, "%)")
table.insert(chars, "%%")
table.insert(chars, "%.")
table.insert(chars, "%[")
table.insert(chars, "%]")
table.insert(chars, "%*")
table.insert(chars, "%+")
table.insert(chars, "%-")
table.insert(chars, "%?")
local function checkspecialcharacter()
for i, permitWord in pairs(filter_record) do
-- 检查是否是特殊字符替换掉
for m,char in pairs(chars) do
if string.find(permitWord, char) ~= nil then
permitWord = string.gsub(permitWord, char, "%%"..char)
end
end
filter_record[i]= permitWord
end
end
local function check(message)
-- 输入的字符要转义成安全的
message = string.format("%q", message)
for _, permitWord in pairs(filter_record) do
if string.find(message, permitWord) ~= nil then
message = string.gsub(message, permitWord, "**")
end
end
end
另,在过滤字table中,过滤顺序是以table顺序过滤,那后面的过滤字符如果含前面的过滤字符,就不匹配了
lua中newkey
/*
** inserts a new key into a hash table; first, check whether key's main
** position is free. If not, check whether colliding node is in its main
** position or not: if it is not, move colliding node to an empty place and
** put new key in its main position; otherwise (colliding node is in its main
** position), new key goes to an empty position.
*/
static TValue *newkey (lua_State *L, Table *t, const TValue *key) {
Node *mp = mainposition(t, key);// 计算新key的hash位置1
if (!ttisnil(gval(mp)) || mp == dummynode) {// 如果1位置值不为空 或者就是空节点
Node *othern;
Node *n = getfreepos(t); /* get a free place */ // 从后向前获得一个空位
if (n == NULL) { /* cannot find a free place? */ // 没有空位了重新rehash
rehash(L, t, key); /* grow table */
return luaH_set(L, t, key); /* re-insert key into grown table */
}
lua_assert(n != dummynode); // 有空的位置2
othern = mainposition(t, key2tval(mp)); // 查看现在占着1位置上面的key的应该在什么样的hash位置x
if (othern != mp) { /* is colliding node out of its main position? */ // 如果x不等于1即 不该在当前1位置上
/* yes; move colliding node into free position */
while (gnext(othern) != mp) othern = gnext(othern); /* find previous */ // 从1位置的链头开始找到这个当前占着1的节点
gnext(othern) = n; /* redo the chain with `n' in place of `mp' */ // 把这个节点的下个next指向新节点
*n = *mp; /* copy colliding node into free pos. (mp->next also goes) */ // 把节点的值转到新位置2
gnext(mp) = NULL; /* now `mp' is free */ // 把1这个位置空出来,放新key
setnilvalue(gval(mp));
}
else { /* colliding node is in its own main position */
/* new node will go into free position */
gnext(n) = gnext(mp); /* chain new position */ // 2位置指向原来主链的后面
gnext(mp) = n; // 主链指向新的位置2
mp = n; // 重新指向方便后面负值
}
}
gkey(mp)->value = key->value; gkey(mp)->tt = key->tt; // 赋key
luaC_barriert(L, t, key);
lua_assert(ttisnil(gval(mp)));
return gval(mp);
}
方便理解 用了 1,2,x表位置,脑袋简单喜欢简单解释。
** inserts a new key into a hash table; first, check whether key's main
** position is free. If not, check whether colliding node is in its main
** position or not: if it is not, move colliding node to an empty place and
** put new key in its main position; otherwise (colliding node is in its main
** position), new key goes to an empty position.
*/
static TValue *newkey (lua_State *L, Table *t, const TValue *key) {
Node *mp = mainposition(t, key);// 计算新key的hash位置1
if (!ttisnil(gval(mp)) || mp == dummynode) {// 如果1位置值不为空 或者就是空节点
Node *othern;
Node *n = getfreepos(t); /* get a free place */ // 从后向前获得一个空位
if (n == NULL) { /* cannot find a free place? */ // 没有空位了重新rehash
rehash(L, t, key); /* grow table */
return luaH_set(L, t, key); /* re-insert key into grown table */
}
lua_assert(n != dummynode); // 有空的位置2
othern = mainposition(t, key2tval(mp)); // 查看现在占着1位置上面的key的应该在什么样的hash位置x
if (othern != mp) { /* is colliding node out of its main position? */ // 如果x不等于1即 不该在当前1位置上
/* yes; move colliding node into free position */
while (gnext(othern) != mp) othern = gnext(othern); /* find previous */ // 从1位置的链头开始找到这个当前占着1的节点
gnext(othern) = n; /* redo the chain with `n' in place of `mp' */ // 把这个节点的下个next指向新节点
*n = *mp; /* copy colliding node into free pos. (mp->next also goes) */ // 把节点的值转到新位置2
gnext(mp) = NULL; /* now `mp' is free */ // 把1这个位置空出来,放新key
setnilvalue(gval(mp));
}
else { /* colliding node is in its own main position */
/* new node will go into free position */
gnext(n) = gnext(mp); /* chain new position */ // 2位置指向原来主链的后面
gnext(mp) = n; // 主链指向新的位置2
mp = n; // 重新指向方便后面负值
}
}
gkey(mp)->value = key->value; gkey(mp)->tt = key->tt; // 赋key
luaC_barriert(L, t, key);
lua_assert(ttisnil(gval(mp)));
return gval(mp);
}
方便理解 用了 1,2,x表位置,脑袋简单喜欢简单解释。
NGUI scrollview例子
NGUI 里面scrollview的例子,我做了一遍,结果怎么都无法拖拽滚动,原来是Box Collider的size问题,mark下
socket编程
想要整合下讲的比较好的关于socket编程的文章,以后会看到好的就mark下
http://www.cnblogs.com/skynet/archive/2010/12/12/1903949.html
http://www.cnblogs.com/skynet/archive/2010/12/12/1903949.html
UILoadingBar里面的setPercent的故事啊……
[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
void UILoadingBar::setPercent(int percent)
{
if ( percent < 0 || percent > 100)
{
return;
}
……
}
弄了一下午的bug,原来是它!
一直用lua写,没注意这个setPercent里面的实现,今天弄了个bug,当然也得感谢这个bug,理解更进一步,其实看一眼就知道的问题
俺的这个percent超了100,所以你懂的……
void UILoadingBar::setPercent(int percent)
{
if ( percent < 0 || percent > 100)
{
return;
}
……
}
弄了一下午的bug,原来是它!
一直用lua写,没注意这个setPercent里面的实现,今天弄了个bug,当然也得感谢这个bug,理解更进一步,其实看一眼就知道的问题
俺的这个percent超了100,所以你懂的……
用批处理建立文件夹
[plain] view plaincopy
[plain]
:home
@echo off
cls
@echo
set /p testa=输入目录:
set /p testb=输入创建文件夹个数:
if /i %testb% LSS 10 goto test0
if /i %testb% GEQ 10 goto test0 test1
:test0
for /L %%n in (1,1,9) do (
md %testa%0%%n
md %testa%0%%n\\公司_0%%n
)
:test1
for /L %%n in (10,1,%testb%) do (
md %testa%%%n
md %testa%%%n\\公司_%%n
)
echo 创建完成!
echo. & pause
没弄过批处理 仿例子写了个 能用就行
[plain]
:home
@echo off
cls
@echo
set /p testa=输入目录:
set /p testb=输入创建文件夹个数:
if /i %testb% LSS 10 goto test0
if /i %testb% GEQ 10 goto test0 test1
:test0
for /L %%n in (1,1,9) do (
md %testa%0%%n
md %testa%0%%n\\公司_0%%n
)
:test1
for /L %%n in (10,1,%testb%) do (
md %testa%%%n
md %testa%%%n\\公司_%%n
)
echo 创建完成!
echo. & pause
没弄过批处理 仿例子写了个 能用就行
字符串和字符数组
[cpp] view plaincopy
char str[] = "0123456789";
int i = sizeof(str); // i = 11;包括后面的'\0'
int j = strlen(str); // j = 10;字符串的长度
char str1[10] = "012345678"; // 只能到8,最后一个字符存放'\0'
int i1 = sizeof(str1); // i1 = 10;包括后面的'\0'
int j1 = strlen(str1); // j1 = 9;字符串的长度
char str2[10] = {'0','1','2','3','4','5','6','7','8','9'}; // 存放10个字符
int i2 = sizeof(str2); // i2 = 10;
int j2 = strlen(str2); // j2 = ?;不确定的长度,不知道什么地方有字符'\0'出现
// 分不清时,一个例子搞定
sizeof 返回一个对象或者类型所占的内存字节
strlen返回字符串的长度
char str[] = "0123456789";
int i = sizeof(str); // i = 11;包括后面的'\0'
int j = strlen(str); // j = 10;字符串的长度
char str1[10] = "012345678"; // 只能到8,最后一个字符存放'\0'
int i1 = sizeof(str1); // i1 = 10;包括后面的'\0'
int j1 = strlen(str1); // j1 = 9;字符串的长度
char str2[10] = {'0','1','2','3','4','5','6','7','8','9'}; // 存放10个字符
int i2 = sizeof(str2); // i2 = 10;
int j2 = strlen(str2); // j2 = ?;不确定的长度,不知道什么地方有字符'\0'出现
// 分不清时,一个例子搞定
sizeof 返回一个对象或者类型所占的内存字节
strlen返回字符串的长度