关于字符串结束符的问题

wymplus 2006-11-02 09:59:05
#include<iostream.h>

void main(void)
{char s[8];
cout<<"输入一行字符串:";
cin.getline(s,9);//最多为(s,9);(s,10)程序就无法执行了
cout<<s; //此时输出的s是不是没有字符串结束符?
}
//试验过了,函数cin.getline(s,n)能够拷贝n-1个字符加上一个字符串结束符到s中,但总共不能超过8个,但是为何我能在S字符数组中输入8个字符?如abcdefgl,那字符串的结束符岂不是没处放了?可是cin.getline(s,9)确好像是把8个字符加一个字符串的结束符输给了s


在值调用中 为何数组做实参形参时能直接把值带回而不用用return 而且我发现用return 也可以返回数组 但不太明白正确地格式是什么
这岂不是破坏了值调用的性质?
是不是值调用中只有数组可以? 那结构体可以吗? 要是结构体里定义了一个数组变量呢?
...全文
886 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
CExp001 2006-11-02
  • 打赏
  • 举报
回复
关注
lann64 2006-11-02
  • 打赏
  • 举报
回复
你这是c++吗?新手乐园看不清楚是c还是c++,看头文件推测。
c++里,结构是类,直接用结构做参数是拷贝整个结构而不是指针,传递进的是值。用引用或结构指针可以带回返回值。
ysc918 2006-11-02
  • 打赏
  • 举报
回复
不会。up
lann64 2006-11-02
  • 打赏
  • 举报
回复
在值调用中 为何数组做实参形参时能直接把值带回而不用用return 而且我发现用return 也可以返回数组 但不太明白正确地格式是什么
---------------------------------
数组做函数参数时,实际上传送的是指向数组开始的指针,所以可以用它改变原来数组的值。跟值传送不矛盾。
Bennyatt 2006-11-02
  • 打赏
  • 举报
回复
帮你顶一下
只是大致看了一下你的问题。。
今天超级忙,表示关注!!
lm3478 2006-11-02
  • 打赏
  • 举报
回复
楼上说的对,很全面了,数组会自动追加一个\0在后面的,手工放的时候就需要写入\0
serapis44 2006-11-02
  • 打赏
  • 举报
回复
关于数组
char s[8];实质上数组名s也是一个指针,s指向的是数组的首地址,首地址中的值就是s[0]中的值,可以表达为*(s+0)==s[0] ,同理*(s+1)==s[1] .ISO/ANSI标准中规定,数组中的最后一个值的后一位空间,也是属于此数组的有效范围之内,但这一位除\0外,不能存储别的值,这就是为什么LZ在声明一个8个空间的数组后,放入8个字符,在第9位扔能放入\0 的原因,当然cin很智能,自动为这一位放入了\0.
当使用指针时,s+8 也是可以有效的.

关于数组做实参形参
当数组做实参形参时,不是用的值引用,而是用的地址引用,使用的是指向一个数组首地址的指针,你对形参的操作,实际上还是在操作实参中的数组,因为指针指向的地址是相同的,系统LZ可以看下关于值引用和地址引用的区别或说明
logo0775 2006-11-02
  • 打赏
  • 举报
回复
像string类型一样扩大?

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧