社区
C++ 语言
帖子详情
在线等怎么把char a[10]="abc"中的a[10]字符串清空,就是a[10]里面一个字符也没有装?
ynchngl1840
2005-09-10 10:42:03
在线等怎么把char a[10]="abc"中的a[10]字符串清空,就是a[10]里面一个字符也没有装?
...全文
1051
19
打赏
收藏
在线等怎么把char a[10]="abc"中的a[10]字符串清空,就是a[10]里面一个字符也没有装?
在线等怎么把char a[10]="abc"中的a[10]字符串清空,就是a[10]里面一个字符也没有装?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
joymouse
2005-09-11
打赏
举报
回复
初始化的时候可以:char a[10]={0};
运行的时候只能:memset(a, 0, sizeof(a));
dearlee_01
2005-09-11
打赏
举报
回复
方法1:
for(int i = 0, i< 10 ,i++) {
a[i] = 0;
}
方法2:
memset(a, 0, sizeof(a));
方法3:
a = "/0";
xiaocai0001
2005-09-11
打赏
举报
回复
To: mayax(又长又今)
你怎么这么抬杠呢?
我不是说了么
memset( a , 0 , sizeof(char) * 10 );
这种写法,若a是数组则没有问题,若a是指向数组的指针则有问题了。
char b[2];
char c[2];
char * a = b;
memset(a,0,sizeof(a));
------------------
你看你这儿的a是指针还是数组?????
看好了再说不行???
v41dugu
2005-09-11
打赏
举报
回复
我来说一下
如果这个数组是作为字符串的作用 也就是进行整个数组的操作 当然用加'\0'作结束标志也就算是清空了 后面的元素是如何的根本不重要
但是在有的情况下 字符数组也可能对每个元素单独操作。这种情况下如果要清空数组就要把每个元素都设为’\0‘ 就可以用menset这个函数了 用法就想上面的说的。
xiaocai0001
2005-09-11
打赏
举报
回复
To: mayax(mayax)
--------
memset( a , 0 , sizeof(char) * 10 );
这种写法,若a是数组则没有问题,若a是指向数组的指针则有问题了。
antter
2005-09-11
打赏
举报
回复
to mayax(又长又今)
我的自然是比你要牵强,我举这例子的目的并不是阐明我的观点,而是说明你的牵强。你强行引入了一个指针,抛离了楼主字符串数组char[]的前提,强加了一个越界的错误,我也可以引入了一个无效的指针,强加一个无效指针的错误。
我们知道char[]的大小已知的,换句话说你仅仅存在一个 char a[];是不成立的,对已知大小的数组用sizeof(a)取得大小是很厚道的。memset(a,0,sizeof(a))是常用的,有效的,全面的数组清空,对应了楼主要求的"就是a[10]里面一个字符也没有装"。
而a[0]='\0'始得字符串开始符为结束符也是一个行之有效的方法,因为是字符串,在面对字符串的操作中我也建议使用这种方法,但是数据并没清除。
如有字符串a[]="abc";
a[0]='\0';
后来又有操作
a[0]='1';
a[1]='2';
a则变成了"12c";
而memset(a,0,sizeof(a))后
a则变成了"12";
cqpp
2005-09-11
打赏
举报
回复
sizeof是编译时候就决定了的吧!a是指针的话那sizeof(a) 为sizeof(char *) == 4吧!
russilong
2005-09-11
打赏
举报
回复
我编辑了一下,如果考虑最一般的情况,memset(a,0,sizeof(char)*10),memset(a,0,sizeof(a))都没问题,无论a士数组还是指针。
xinxiakk
2005-09-11
打赏
举报
回复
我说过了,最后一个参数是个数,number,和什么类型没关系
mayax
2005-09-11
打赏
举报
回复
antter(JiangMiao|www.sssdf.com)
那既然我的例子牵强的话,前面那个证明我的代码有问题的前提不就更牵强吗?
况且 char * a = NULL; 的情况可以通过一句 if( a ) 来解决。
那可能你又会说 a 可能指向一个非法空间。
那么最完美的结果可能就是
if( a )
{
try { a[0] = 0; }
catch(...){ abort(); }
}
这个问题的核心还只是讨论如何清空字符串而已,实际上把第一个字符设成 '\0' 足以,因为没有设立任何字符串大小的前提。
xinxiakk(特亚)
如果是 wchar_t 而不是 char 呢?
我认为写多一句 sizeof 不会花太多的时间,但对写程序养成严谨的习惯是有好处的。
xinxiakk
2005-09-11
打赏
举报
回复
我首先说一下,关于一些基本知识,
char a[10]="abc";
这个是定义了一个字符串数组,其中a[0]='a',a[1]='b',a[2]='c',后面的从a[3]-a[9]都没有值,我用VC6 显示时什么都没有显示。
你想清空这个字符串,用memset这个函数很好,但是上面的几位用法有问题,memset最后的一个参数应该是你想设置这个字符的个数,注意是一个number,和内存大小,机器位数没关系,直接设置就行了,和sizeof没任何联系。MSDN上对memset最后一个参数的说明是Number of characters 。
以下程序可以说明你要的结果,运行环境是WindowsXP ,VC6。已通过编译,并且可以运行。
#include<iostream>
#include<string.h>
using namespace std;
char a[10]="abc";
void main()
{
cout<<a[0]<<'\n'<<a[1]<<'\n'<<a[2]<<endl;
cout<<sizeof(a)<<endl;
cout<<sizeof(char)*10<<endl;
memset(a,0,10);
cout<<a[0]<<'\n'<<a[1]<<'\n'<<a[2]<<endl;
}
运行结果为:
a
b
c
10
10
//注意,这个地方输出为3行空
press any key to continue
antter
2005-09-11
打赏
举报
回复
= - 我怎么会写memcpy了。
antter
2005-09-11
打赏
举报
回复
楼上有点牵强
就如同类似用
char* a=NULL;
a[0]=0;
证明a[0]=0不行一样
如果是字符串这样算是清空,但如果是字符数组呢?a[1]还是原来的a[1]。
mayax
2005-09-11
打赏
举报
回复
xiaocai0001(萧筱雨) :
那 memset(a,0,sizeof(a)); 这种写法难道就没问题了吗?
而且
设
char b[2];
char c[2];
char * a = b;
memset(a,0,sizeof(a));
这样的问题恐怕更大吧,连 c 的空间都改写了。
建议还是直接 a[0] = 0;
megaboy
2005-09-10
打赏
举报
回复
使用memset就行了:
memset(a, 0, sizeof(a));
mayax
2005-09-10
打赏
举报
回复
xiaocai0001(萧筱雨)
你的有问题,应该是
memset( a , 0 , sizeof(char) * 10 );
mayax
2005-09-10
打赏
举报
回复
a[0] = 0;
最快速的清空。
xiaocai0001
2005-09-10
打赏
举报
回复
建议用 memset(a,0,sizeof(a));
antter
2005-09-10
打赏
举报
回复
如果a是字符串则 a[0]='\x0';
如果a是字符组则 memcpy(a,0,sizeof(a));
--------
www.sssdf.com/forum 成长中的交流中心,等待您的参于。
c语言
字符
串
数组 初始化,C
字符
串
数组初始化问题
1、定义的时候直接用
字符
串
赋值
char
a[
10
]="hello";注意:不能先定义再给它赋值,如
char
a[
10
]; a[
10
]="hello";这样是错误的!2、对数组
中
字符
逐个赋值
char
a[
10
]={'h','e','l','l','o'};3、利用strcpy
char
a[
10
]; ...
从键盘输入
一个
字符
串
a,并在串
中
的最大元素后边插入另 外输入的
字符
串
b。
题目:从键盘输入
一个
字符
串
a,并在串
中
的最大元素后边插入另 外输入的
字符
串
b。 分析:第一步要做的是找到最大的元素所在的下标,第二步就是将b
字符
串
插入最大的元素后面。 代码如下: #include <stdio.h&...
C
字符
串
数组赋值
1、定义的时候直接用
字符
串
赋值
char
a[
10
]="hello"; 注意:不能先定义再给它赋值,如
char
a[
10
]; a[
10
]="hello"; 这样是错误的! 2、对数组
中
字符
逐个赋值
char
a[
10
]={'h','e','l','l','o'}; 3、利用...
C语言基础学习笔记——
字符
串
及
字符
串
操作函数
字符
串
的定义:
字符
串
是位于双引号
中
的...注意:可以把
一个
字符
常量赋值给
一个
字符
变量,但不能把
一个
字符
串
常量赋值给
字符
变量。如:
char
ch = ‘A’;(正确) 但是
char
ch = “A”;(错误)。C语言
中
没有
字符
串
变量...
C++
中
的数组与
字符
串
C++
中
有两种风格
字符
串
,分别是: C++风格
字符
串
C风格
字符
串
它们各自的声明方式如下: void main(){ string a = "hello"; //C++风格
char
*b = "hello"; //C风格
char
c[] = "hello"; //C风格 const ...
C++ 语言
64,654
社区成员
250,484
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章