C语言大神,请问大神这是什么歌4这个跟老师讲的不一样啊,也跟书上的不一样,字符数组后面不是有关 ‘\0么怎么5都可以

欢迎加入我们,一同切磋技术。 &
用户名: &&&
密 码: &
共有 8670 人关注过本帖
标题:请问怎么把输入的字符串保存在字符数组中阿?
等 级:论坛游侠
帖 子:88
专家分:172
结帖率:100%
&&已结贴√
&&问题点数:20&&回复次数:3&&&
请问怎么把输入的字符串保存在字符数组中阿?
像这样:我用scanf输入:
hello, olleh why?(注意有空白间隔)
*****************
好像用scanf,如果碰到回车或空白就停止读取用户的输入了?输出效果是
***hello,***
****hello, olleh why?。***
求点明!感谢
搜索更多相关主题的帖子:
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
&&得分:15&
用gets(),比如:
char str[90];
gets(str);//输入
puts(str);//输出
善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
恩 就是这样
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
===========深入&-----------------&浅出============
来 自:上海
等 级:火箭侠
帖 子:858
专家分:3233
程序代码:#include &stdio.h&
int main(int argc, char *argv[])
&&& char s[<font color=#],t[<font color=#]={' '},v[<font color=#]={' '};
&&& scanf(&%s %s %s&,s, t+<font color=#, v+<font color=#);
&&& printf(&%s&,strcat(s,strcat(t,v)));
&&& return <font color=#;
技术问题,请不要以短消息方式提问
版权所有,并保留所有权利。
Powered by , Processed in 0.054412 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights ReservedC语言 字符指针和字符数组的区别_Linux编程_Linux公社-Linux系统门户网站
你好,游客
C语言 字符指针和字符数组的区别
来源:Linux社区&
作者:x_xiaoge
char *str = "This is a string."; 是对字符指针进行初始化。此时,字符指针指向的是一个字符串常量的首地址,即指向字符串的首地址。 这里要注意字符指针与字符数组之间的区别。例如,有说明语句: char string[ ]="This is a string."; 此时,string是字符数组,它存放了一个字符串。 字符指针str与字符数组string的区别是:str是一个变量,可以改变str使它指向不同的字符串,但不能改变str所指的字符串常量。string是一个数组,可以改变数组中保存的内容。
如果有: char *str, *str1="This is another string."; char string[100]="This is a string."; 则在在程序中,可以使用如下语句: str++; /* 指针str加1 */ str = "This is a NEW string."; /* 使指针指向新的字符串常量 */ str = str1; /* 改变指针str的指向 */ strcpy( string, "This is a NEW string.") /* 改变字符串的的内容 */ strcat( string, str) /* 进行串连接操作 */ 在程序中,不能进行如下操作: string++; /* 不能对数组名进行++运算 */ string = "This is a NEW string."; /* 错误的串操作 */ string = str1; /* 对数组名不能进行赋值 */ strcat(str, "This is a NEW string.") /* 不能在str的后面进行串连接 */ strcpy(str, string) /* 不能向str进行串复制 */ 字符指针与字符数组的区别在使用中要特别注意。
相关资讯 & & &
& (12/28/:34)
& (11/22/:35)
& (02月26日)
& (12/27/:56)
& (10/30/:58)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款c/c&#43;&#43;中的char数组类型,不支持直接通过等号来对变量赋&#20540;,如果用等号,那就是另外一个意义了:对char*指针赋&#20540;,而不是对char*数组所指向的&#20540;赋&#20540;。但这里需求是要对stu.name这个char数组(也就是char*,指针类型)所指向的&#20540;赋&#20540;,而不是修改stu.name这个指针的&#20540;,所以用等号,能编译通过,但是意义不一样&
或者这么记:
对于指针类型来说,用等号只是修改该指针的指向,使其指向另外一个&#20540;;
如果用非指针类型,用等号就是复制内存数据到新的变量中,也就是确切修改了该变量的&#20540;
&c语言由于是最早的一批语言,当时设置者没有考虑到编程发开者的易用性,所以对于字符串这种变量,没有提供现成的类型,而是需要你手动构建一个char数组,用char数组来存储字符串(c&#43;&#43;提供了单独的类型string,就是专门解决c语言这个问题),或者这么说吧,c语言中,你要存储字符串,只能用char数组,如果只是一个char类型(单个字符,不是一连串的字符串),才可以用char类(或者int型)
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:70次
排名:千里之外23:35 提问
c语言字符数组中回车符问题?
//getline函数:将一行读入到S中并返回其长度
int getline(char s[] ,int length)
for(i=0; i&length-1 && (c=getchar())!=EOF && c!='\n';++i)
if(c == '\n'){
s[i]='\0';
我想问一下,这里的if(c =='\n')有什么用?我觉得加上它反而错了。请知道的大牛告诉我一下,这是为什么?谢谢!
按赞数排序
s[i]=c多余
这段代码去掉输入的回车
没错,注意for循环范围
int getline(char s[] ,int length)
for(i=0; i&length-1 && (c=getchar())!=EOF && c!='\n';++i)
===因为没有大括号,for循环到这里就结束了
if(c == '\n'){//判断输入的最后一次字符是不是"\n",如果是加上"\n",如果不是,则for循环已经处理了。
s[i]='\0';
这证明getline函数读取一行时将‘\n’字符也读进去数组里面了
//表示存取所有你输入的非EOF(Ctrl+z)和\n字符
for(i=0; i&length-1 && (c=getchar())!=EOF && c!='\n';++i){
}//最好加上花括号
if(c == '\n'){
表示你最后的输入是\n的话,说明一行输入结束,需要把\n存到数组(表示一行数据),最后加上\0(字符串结束符),这样就存储了一行数据,
如果输入的是最后的输入不是\n而是EOF的话,说明是自己异常终止了这个,注意这不是一行正常的数据。
你的主要函数功能很明确,如函数name:getline( ),从终端读取一行字符数据流,或者说读取一行字符流到S中。
但如何区分是一行数据流,或者说数据流行单位是如何识别的,或者说行与行之间是如何区分的?是通过分隔符‘\n’,也就是终端输入的回车键来区分。
但数据流还有其他限制,比如存储空间大小,这里是数组大小,用户想提前结束输入,这里是通过EOF来区分,也就是用户键入“Ctrl+z”表示输入行输入提前结束。
所以 for(i=0; i&length-1 && (c=getchar())!=EOF && c!='\n';++i)循环的条件限制这里有三个。
之所以有这段代码
if(c == '\n'){
是因为,当用户键入回车‘\n’时,循环终止,行输入结束,但回车符‘\n’也是作为行数据的一部分理应存入数组存储空间,但循环终止没有存入,所以加这段代码来实现‘\n’字符的存储~
嗯。楼上的回答的都很好,**最好加上花括号**,不然程序结构太不清晰了;
虽然程序支持这个特性,但我们为了程序的可读性,**最好加上花括号**,这个并不会影响最终程序的大小和性能!
代码结构不好造成理解上的偏差倒有可能导致很多怪异问题的发生。
这个的确是c语言的一个弊端,很多情况下,不需要那个换行符'\n',我的方法是,直接抛掉那个'\n',换成'\0'
这里的if(c =='\n')有什么用?我觉得加上它反而错了。请知道的大牛告诉我一下,这是为什么?谢谢!
答:加与不加实现的内容不一样,如果有的话,意思是最后输入的回车要放到s数组里,如果没有的话,就少了一个回车,根据你自己的需要
//getline函数:将一行读入到S中并返回其长度
int getline(char s[], int length)
for(i = 0; i & length - 1 && (c = getchar()) != EOF && c != '\n'; ++i)
if(c == '\n')
//这里的语句去掉的话和本来的程序不等价,s数组里会少了一个回车
s[i] = '\0';
\n是换行,不是回车
s[i]=c多余,去掉就好了
其他相似问题大神是如何玩C语言的!
来源:博客园
  我在酷壳上看到一篇文章,,看得感觉让我真是佩服地五体投地啊。虽说谦称自己不是高手啥的,但是写出这样的文章来,真是让我感觉自己的水平真是渣渣!我看完了感觉有点小激动,也想自己讲讲,试试,看看能不能讲清楚那个中所叙述的的问题,绝对没有抄袭的意思。由于我的水平实在有限,写的可能很糟糕,还请各位见谅!&#13;   &#13;  OK,废话少说,先来说说一下问题,有这么一段代码,&#13;&#13; 1 #include&stdio.h&&#13; 2 struct str{&#13; 3
int&#13; 4
char s[0];&#13; 5 };&#13; 6 &#13; 7 struct foo {&#13; 8
struct str *a;&#13; 9 };&#13;10 &#13;11 int main(int argc, char** argv) {&#13;12
struct foo f={0};&#13;13
if (f.a-&s) {&#13;14
printf( f.a-&s);&#13;15
return 0;&#13;17 }&#13;&#13;  这个程序会在哪一行挂掉呢?我用的是gcc,我这里是在第14行挂掉的。为什么呢?为什么那个if语句那里不挂掉,而是在printf语句这里挂掉呢?&#13;  这个我们首先得分析变量是啥?变量是啥,其实就是内存区域的别名!而结构体类型的变量,其实就是一大块内存区,然后结构体变量名指向的是这块内存区的起始地址,然后根据变量的类型来不断向后推出其他变量。比如上面那个str结构体。其实就是一块4字节内存用来存放int变量len,然后后面的字节用来存放字符数组s。我们可以通过gdb打印出他们的地址,如下图所示:&#13;  &#13;  这里结构体变量t和它的第一个成员len的地址都是0xbffff184,而它的s成员的地址就是t的地址+4也就是0xbffff188。OK,通过这样的叙述不知道大家能不能理解,其实结构体中每个成员的变量的地址其实就是结构体变量的地址加上相对偏移。比如上面例子中s的地址就是t的地址加上4个字节(代表int变量)。&#13;  知道了这个概念,我们来分析一下这段程序。&#13;  &#13;  首先从主函数开始,建立了一个f变量,里面有一个成员是指针a,然后指针a里面存放的地址被初始化为0。然后在if语句中使用的是f.a-&s,它就是找到一个地址,就是s变量的地址,寻找的方式就是先找到结构体变量指针a中存放的地址,然后再对这个地址+4,然后找到这个地址之后并没有去访问这个地址所代表的内存空间,所以程序没有报错。而在print语句中呢,也是先找到这个地址,然后去访问这个地址所代表的内存空间,试图在这个空间中寻找一串字符串并输出出来。由于a中我们已经初始化为0,所以访问的内存空间就是0x4的空间,所以程序就会挂掉了!^ o ^&#13;  
免责声明:本站部分内容、图片、文字、视频等来自于互联网,仅供大家学习与交流。相关内容如涉嫌侵犯您的知识产权或其他合法权益,请向本站发送有效通知,我们会及时处理。反馈邮箱&&&&。
学生服务号
在线咨询,奖学金返现,名师点评,等你来互动}

我要回帖

更多关于 c语言数组 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信