定义一个字符串

时间:2022-12-03 10:54:43
char name2[10] = "Mark" ;
Mark只有4个字符,而给了它十个字节的空间,那别的内存区是不是都存成'\0'了?
就像这样
  M a r k \0 \0 \0 \0 \0 \0 

31 个解决方案

#1


该回复于2012-03-23 11:48:21被版主删除

#2


恩  是的  但最后一个‘\0'是系统自动加上去的

#3


- name2 0x0028fd4c "Mark" char [10]
[0] 77 'M' char
[1] 97 'a' char
[2] 114 'r' char
[3] 107 'k' char
[4] 0 char
[5] 0 char
[6] 0 char
[7] 0 char
[8] 0 char
[9] 0 char

#4


引用 2 楼 zcl1518290393 的回复:
恩  是的  但最后一个‘\0'是系统自动加上去的

多谢

#5


引用 3 楼 lanfeng_10 的回复:
- name2 0x0028fd4c "Mark" char [10]
[0] 77 'M' char
[1] 97 'a' char
[2] 114 'r' char
[3] 107 'k' char
[4] 0 char
[5] 0 char
[6] 0 char
[7] 0 char
[8] 0 char
[9] 0 char

你这个是怎么弄得啊

#6


谁删我一楼回复了,为啥删的~~~~
我记得回了个 嗯哪~,这都删,无语了
c/c++板块能人性权变一些吗? 定义一个字符串

#7


定义一个字符串

#8


定义一个字符串

#9


引用 6 楼 zimbu 的回复:
谁删我一楼回复了,为啥删的~~~~
我记得回了个 嗯哪~,这都删,无语了
c/c++板块能人性权变一些吗?
可能版主觉得你回复太简单的了哈哈哈

#10


引用 9 楼 kangyuanxun 的回复:
引用 6 楼 zimbu 的回复:

谁删我一楼回复了,为啥删的~~~~
我记得回了个 嗯哪~,这都删,无语了
c/c++板块能人性权变一些吗?
可能版主觉得你回复太简单的了哈哈哈

类似的删回复情况很多,都习惯了~~

水至清则无鱼 人至察则无徒

#11


不都成0, 后面的内容是随机的.

#12


引用 11 楼 wwwliang 的回复:
不都成0, 后面的内容是随机的.

只有第一个0是确定的.
因此操作字符数组时要注意加0,
或者先将数组清0.

#13


我也觉得后面内容是随机的才对,

#14


引用 11 楼 wwwliang 的回复:
不都成0, 后面的内容是随机的.

really?are you sure?

#15


同意楼上,只有头5个字节是确定的“Mark\0”,后面随机。
如果把定义改成 static char name2[10] = "Mark" ;的话就保证后面全零了

#16


引用 14 楼 habike 的回复:
引用 11 楼 wwwliang 的回复:

不都成0, 后面的内容是随机的.

really?are you sure?


看内存哈.

#17


引用 16 楼 wwwliang 的回复:
引用 14 楼 habike 的回复:
引用 11 楼 wwwliang 的回复:

不都成0, 后面的内容是随机的.

really?are you sure?


看内存哈.

那是怎么看呢?请问

#18


引用 15 楼 leafkai 的回复:
同意楼上,只有头5个字节是确定的“Mark\0”,后面随机。
如果把定义改成 static char name2[10] = "Mark" ;的话就保证后面全零了

soga

#19


引用 17 楼 habike 的回复:
引用 16 楼 wwwliang 的回复:

引用 14 楼 habike 的回复:
引用 11 楼 wwwliang 的回复:

不都成0, 后面的内容是随机的.

really?are you sure?


看内存哈.

那是怎么看呢?请问


你用VS的话, 打开内存窗口, 拖进去看就是,
实在不行, 你打印内存嘛, 别把变量看成变量, 一切都是内存.
变量的类型, 只是决定看待内存方式.

#20


引用 15 楼 leafkai 的回复:
同意楼上,只有头5个字节是确定的“Mark\0”,后面随机。
如果把定义改成 static char name2[10] = "Mark" ;的话就保证后面全零了


问题是这个数组你已经初始了部分数据,其余的默认为0的,
可以自己输出看看。

#21


引用 19 楼 wwwliang 的回复:
引用 17 楼 habike 的回复:
引用 16 楼 wwwliang 的回复:

引用 14 楼 habike 的回复:
引用 11 楼 wwwliang 的回复:

不都成0, 后面的内容是随机的.

really?are you sure?


看内存哈.

那是怎么看呢?请问


你用VS的话, 打开内存窗口, 拖进去看就是,
实在不行, 你打印内存嘛……

我用的是vc6.0啊,请问怎么看那?

#22


建议换Visual Studio吧,集成了VC, 有好的工具才能事半功倍.

打印内存, 循环 printf("%x", 数组[下标]);

-------------------------------------------------------------------------------------
好吧, 我承认我是想来拿点分的,不过这也太慢了.
因为,我遇到问题了, 希望大家帮我顶顶, 看能不能顶出个大牛来, 小弟感激不尽.
这是我发的帖子.
http://topic.csdn.net/u/20120323/11/30af6f40-940a-4e63-a477-fc63b6e8981c.html

#23


引用 22 楼 wwwliang 的回复:
建议换Visual Studio吧,集成了VC, 有好的工具才能事半功倍.

打印内存, 循环 printf("%x", 数组[下标]);

-------------------------------------------------------------------------------------
好吧, 我承认我是想来拿点分的,不过这也太慢了.
因为,我遇到问题了, ……

开始是想学vs的,可是上课和考试都是vc啊,没办法

#24



char str[20] = "hello";

int i;
for (i = 0; i < 20; i++)
   putchar(str[i]);


这样打印出来的数据第一'\0'后面的并不是随机的。而是什么也没打印,我想应该都是'\0'吧。

#25



//只要是初始化,那么没有用的空间也自动初始化成为0
//char mark[10] = "ABCD";
char mark[10] = {'A','B'};

//如果没有初始化,那么保留分配时的随机值
//char mark[10];
//mark[0] = 'A';
for (int i =0; i < 10; i++)
{
printf("%d",mark[i]);
}

#26


在内存中查看的时候,里面并没有\0,k后面都是0啊,我用的是VS2010

#27


引用 25 楼 my_live_123 的回复:
C/C++ code


//只要是初始化,那么没有用的空间也自动初始化成为0
//char mark[10] = "ABCD";
    char mark[10] = {'A','B'};

//如果没有初始化,那么保留分配时的随机值
    //char mark[10];
    //mark[0] = 'A';
    for (int i =0; i < 10; i……



   支持下

#28


应该是随机的!你要是不怕的话可以去访问一下,cout<< name2[6]?看看什么结果!

#29


引用 28 楼 ljun12358 的回复:
应该是随机的!你要是不怕的话可以去访问一下,cout<< name2[6]?看看什么结果!

会崩溃么,为什么要怕

#30


引用 25 楼 my_live_123 的回复:
C/C++ code

//只要是初始化,那么没有用的空间也自动初始化成为0
//char mark[10] = "ABCD";
    char mark[10] = {'A','B'};

//如果没有初始化,那么保留分配时的随机值
    //char mark[10];
    //mark[0] = 'A';
    for (int i =0; i < 10; i++)
    {……

你说的好像很有道理

#31


引用 30 楼 habike 的回复:
引用 25 楼 my_live_123 的回复:

C/C++ code

//只要是初始化,那么没有用的空间也自动初始化成为0
//char mark[10] = "ABCD";
char mark[10] = {'A','B'};

//如果没有初始化,那么保留分配时的随机值
//char mark[10];
//mark[0] = 'A';
for (int i =0……
那我的标题属于没有初始化的,应该是随机值了

#1


该回复于2012-03-23 11:48:21被版主删除

#2


恩  是的  但最后一个‘\0'是系统自动加上去的

#3


- name2 0x0028fd4c "Mark" char [10]
[0] 77 'M' char
[1] 97 'a' char
[2] 114 'r' char
[3] 107 'k' char
[4] 0 char
[5] 0 char
[6] 0 char
[7] 0 char
[8] 0 char
[9] 0 char

#4


引用 2 楼 zcl1518290393 的回复:
恩  是的  但最后一个‘\0'是系统自动加上去的

多谢

#5


引用 3 楼 lanfeng_10 的回复:
- name2 0x0028fd4c "Mark" char [10]
[0] 77 'M' char
[1] 97 'a' char
[2] 114 'r' char
[3] 107 'k' char
[4] 0 char
[5] 0 char
[6] 0 char
[7] 0 char
[8] 0 char
[9] 0 char

你这个是怎么弄得啊

#6


谁删我一楼回复了,为啥删的~~~~
我记得回了个 嗯哪~,这都删,无语了
c/c++板块能人性权变一些吗? 定义一个字符串

#7


定义一个字符串

#8


定义一个字符串

#9


引用 6 楼 zimbu 的回复:
谁删我一楼回复了,为啥删的~~~~
我记得回了个 嗯哪~,这都删,无语了
c/c++板块能人性权变一些吗?
可能版主觉得你回复太简单的了哈哈哈

#10


引用 9 楼 kangyuanxun 的回复:
引用 6 楼 zimbu 的回复:

谁删我一楼回复了,为啥删的~~~~
我记得回了个 嗯哪~,这都删,无语了
c/c++板块能人性权变一些吗?
可能版主觉得你回复太简单的了哈哈哈

类似的删回复情况很多,都习惯了~~

水至清则无鱼 人至察则无徒

#11


不都成0, 后面的内容是随机的.

#12


引用 11 楼 wwwliang 的回复:
不都成0, 后面的内容是随机的.

只有第一个0是确定的.
因此操作字符数组时要注意加0,
或者先将数组清0.

#13


我也觉得后面内容是随机的才对,

#14


引用 11 楼 wwwliang 的回复:
不都成0, 后面的内容是随机的.

really?are you sure?

#15


同意楼上,只有头5个字节是确定的“Mark\0”,后面随机。
如果把定义改成 static char name2[10] = "Mark" ;的话就保证后面全零了

#16


引用 14 楼 habike 的回复:
引用 11 楼 wwwliang 的回复:

不都成0, 后面的内容是随机的.

really?are you sure?


看内存哈.

#17


引用 16 楼 wwwliang 的回复:
引用 14 楼 habike 的回复:
引用 11 楼 wwwliang 的回复:

不都成0, 后面的内容是随机的.

really?are you sure?


看内存哈.

那是怎么看呢?请问

#18


引用 15 楼 leafkai 的回复:
同意楼上,只有头5个字节是确定的“Mark\0”,后面随机。
如果把定义改成 static char name2[10] = "Mark" ;的话就保证后面全零了

soga

#19


引用 17 楼 habike 的回复:
引用 16 楼 wwwliang 的回复:

引用 14 楼 habike 的回复:
引用 11 楼 wwwliang 的回复:

不都成0, 后面的内容是随机的.

really?are you sure?


看内存哈.

那是怎么看呢?请问


你用VS的话, 打开内存窗口, 拖进去看就是,
实在不行, 你打印内存嘛, 别把变量看成变量, 一切都是内存.
变量的类型, 只是决定看待内存方式.

#20


引用 15 楼 leafkai 的回复:
同意楼上,只有头5个字节是确定的“Mark\0”,后面随机。
如果把定义改成 static char name2[10] = "Mark" ;的话就保证后面全零了


问题是这个数组你已经初始了部分数据,其余的默认为0的,
可以自己输出看看。

#21


引用 19 楼 wwwliang 的回复:
引用 17 楼 habike 的回复:
引用 16 楼 wwwliang 的回复:

引用 14 楼 habike 的回复:
引用 11 楼 wwwliang 的回复:

不都成0, 后面的内容是随机的.

really?are you sure?


看内存哈.

那是怎么看呢?请问


你用VS的话, 打开内存窗口, 拖进去看就是,
实在不行, 你打印内存嘛……

我用的是vc6.0啊,请问怎么看那?

#22


建议换Visual Studio吧,集成了VC, 有好的工具才能事半功倍.

打印内存, 循环 printf("%x", 数组[下标]);

-------------------------------------------------------------------------------------
好吧, 我承认我是想来拿点分的,不过这也太慢了.
因为,我遇到问题了, 希望大家帮我顶顶, 看能不能顶出个大牛来, 小弟感激不尽.
这是我发的帖子.
http://topic.csdn.net/u/20120323/11/30af6f40-940a-4e63-a477-fc63b6e8981c.html

#23


引用 22 楼 wwwliang 的回复:
建议换Visual Studio吧,集成了VC, 有好的工具才能事半功倍.

打印内存, 循环 printf("%x", 数组[下标]);

-------------------------------------------------------------------------------------
好吧, 我承认我是想来拿点分的,不过这也太慢了.
因为,我遇到问题了, ……

开始是想学vs的,可是上课和考试都是vc啊,没办法

#24



char str[20] = "hello";

int i;
for (i = 0; i < 20; i++)
   putchar(str[i]);


这样打印出来的数据第一'\0'后面的并不是随机的。而是什么也没打印,我想应该都是'\0'吧。

#25



//只要是初始化,那么没有用的空间也自动初始化成为0
//char mark[10] = "ABCD";
char mark[10] = {'A','B'};

//如果没有初始化,那么保留分配时的随机值
//char mark[10];
//mark[0] = 'A';
for (int i =0; i < 10; i++)
{
printf("%d",mark[i]);
}

#26


在内存中查看的时候,里面并没有\0,k后面都是0啊,我用的是VS2010

#27


引用 25 楼 my_live_123 的回复:
C/C++ code


//只要是初始化,那么没有用的空间也自动初始化成为0
//char mark[10] = "ABCD";
    char mark[10] = {'A','B'};

//如果没有初始化,那么保留分配时的随机值
    //char mark[10];
    //mark[0] = 'A';
    for (int i =0; i < 10; i……



   支持下

#28


应该是随机的!你要是不怕的话可以去访问一下,cout<< name2[6]?看看什么结果!

#29


引用 28 楼 ljun12358 的回复:
应该是随机的!你要是不怕的话可以去访问一下,cout<< name2[6]?看看什么结果!

会崩溃么,为什么要怕

#30


引用 25 楼 my_live_123 的回复:
C/C++ code

//只要是初始化,那么没有用的空间也自动初始化成为0
//char mark[10] = "ABCD";
    char mark[10] = {'A','B'};

//如果没有初始化,那么保留分配时的随机值
    //char mark[10];
    //mark[0] = 'A';
    for (int i =0; i < 10; i++)
    {……

你说的好像很有道理

#31


引用 30 楼 habike 的回复:
引用 25 楼 my_live_123 的回复:

C/C++ code

//只要是初始化,那么没有用的空间也自动初始化成为0
//char mark[10] = "ABCD";
char mark[10] = {'A','B'};

//如果没有初始化,那么保留分配时的随机值
//char mark[10];
//mark[0] = 'A';
for (int i =0……
那我的标题属于没有初始化的,应该是随机值了