user-0 提问: 结构体变量作为参数,编译没有问题,运行出现错误,求大神解救!

回复:
user: user-1
content: 如果用楼上各位说的fgets()函数的话，可以这样改： fgets(s.name, sizeof(s.name), stdin);  ------------------------- fgets()函数的manuel：  char *fgets(char *s, int size, FILE *stream);  The first parameter is where the typed name will go (the jerk variable). The second one says how many characters it can read. Here you must use the size of jerk variable as a maximum (you can use the keyword sizeof() to let the compiler determine the maximum size). The last parameter must indicate from where you want to read the data. If you want to read from the keyboard, you must use stdin (it is the standard input channel).  它接受3个参数： 1.字符串首地址 2.size 3.输入流

user: user-1
content: #include <stdio.h> #include <stdlib.h>  struct st { 	char name[10]; 	char age[10];//这里声明age是个字符数组（字符串） 	char sex[10]; };  void out(struct st s) { 	printf("name=%s\n", s.name); 	printf("age=%s\n", s.age); 	printf("sex=%s\n", s.sex); }  void in(struct st s) {  	printf("please input your name:\n"); 	gets(s.name); 	printf("please input your age:\n"); 	gets(s.age); 	printf("please input your sex:\n"); 	gets(s.sex); 	out(s); }  int main() { 	struct st s = { "zhangsan", "23", "man" }; //这里应该是"23"，是字符串，而非整形 	in(s); 	out(s); 	return 0; }

user: user-0
content: 引用 28 楼 go_and_see 的回复:[quote=引用 27 楼 zaixiankaifa 的回复:]  但如果说连尊严都需要靠自己向别人证明才能获得的话,这就已经是一个病态的社会了.  全世界都病了？呵呵。[/quote]  你认为全世界都这样? 走出你所在的地域和国度去看看,它们并不能代表全世界.

user: user-0
content: 引用 20 楼 go_and_see 的回复:[quote=引用 19 楼 zaixiankaifa 的回复:]  不要拿"潜规则"出来当很光荣的事情,这种所谓的潜规则还不怕丢人丢到骨子里面  你最大的问题不是基础，是态度。  首先，你没有动脑子，因此把一个简单问题复杂化。假如当时认真看编译器的警告，仔细想问题的原因，这个问题也许就不是问题。  其次，你求人帮忙的心态有问题。既然是求别人，那么别人可以选择帮或不帮，可以耐心帮可以不耐烦，你要有心理准备。不能因为别人不耐烦或不帮，就心生怨恨，因为你是在求别人。[/quote]        首先,澄清一个问题,有没有脑子有待医学验证,但你这样说话的语气就是不尊重人,想必明眼人一看就知道你的态度和语气.           其次,求别人不等于毫无尊严,没有人说就因为求别人而什么都不顾,把自己贬的一文不值,就算求别人的人也是人,也是生而平等.不要用求别人就自己都不是这种迂腐的传统观念毒害别人和你自己.

user: user-2
content: 引用 19 楼 zaixiankaifa 的回复:不要拿"潜规则"出来当很光荣的事情,这种所谓的潜规则还不怕丢人丢到骨子里面  你最大的问题不是基础，是态度。  首先，你没有动脑子，因此把一个简单问题复杂化。假如当时认真看编译器的警告，仔细想问题的原因，这个问题也许就不是问题。  其次，你求人帮忙的心态有问题。既然是求别人，那么别人可以选择帮或不帮，可以耐心帮可以不耐烦，你要有心理准备。不能因为别人不耐烦或不帮，就心生怨恨，因为你是在求别人。

user: user-3
content: 改成int age的话,在gets(s.age)那里就出问题了,gets()要求char*参数,直接报错:Segmentation fault: 11.   个人觉得LZ的思维方式比较像“削足适履”——因为要用gets，所以数据的设计是xx类型的。 但是比较常规的思考方式是：先决定用什么类型数据，在此基础上决定如何处理此数据。

user: user-4
content: 尺有所短，寸有所长。

user: user-4
content: 众生皆平等

user: user-2
content: 引用 27 楼 zaixiankaifa 的回复:但如果说连尊严都需要靠自己向别人证明才能获得的话,这就已经是一个病态的社会了.  全世界都病了？呵呵。

user: user-0
content: 引用 23 楼 go_and_see 的回复:有的人出生在富豪家庭，有的人出生在贫民窟，他们平等吗？ 总统和平民平等吗，主席和草民平等吗？ 残疾人和正常人平等吗？ 智力偏低的黑人和其他种族平等吗？  所以，人生而平等这个观点还是别当真，这只是个理想。可以说古今中外，即使到现在人和人也是不平等的。你要明白，阶级还是客观存在的，只是以前的统治方式更原始更暴力而已。  想争取尊严，就要靠自己的努力，而不是别人的施舍。  但如果说连尊严都需要靠自己向别人证明才能获得的话,这就已经是一个病态的社会了.

user: user-5
content: 能就说说专业知识吗？ 楼主帮你也没薪酬 说你基础知识不过关也是有原因的 还是多找自己的问题吧

user: user-6
content: 引用 9 楼 max_min_ 的回复:.... 输入年纪可以改成scanf("%d", &s.age); 不用gets 楼主基础知识没过关啊！找本基础书看看吧！  说实话，我觉得版主完全没有鄙视你基础差的意思，就是找本书看看啊，和不会了google一下一个意思啊。lz可能是想多了，版主打那么多字回复你难道是为了鄙视一下你么，鄙视你的话谁有那闲功夫来搭理你，版主的好心别被你当成坏心了。

user: user-2
content: 有的人出生在富豪家庭，有的人出生在贫民窟，他们平等吗？ 总统和平民平等吗，主席和草民平等吗？ 残疾人和正常人平等吗？ 智力偏低的黑人和其他种族平等吗？  所以，人生而平等这个观点还是别当真，这只是个理想。可以说古今中外，即使到现在人和人也是不平等的。你要明白，阶级还是客观存在的，只是以前的统治方式更原始更暴力而已。  想争取尊严，就要靠自己的努力，而不是别人的施舍。

user: user-2
content: 引用 21 楼 zaixiankaifa 的回复:首先,澄清一个问题,有没有脑子有待医学验证,但你这样说话的语气就是不尊重人,想必明眼人一看就知道你的态度和语气.           其次,求别人不等于毫无尊严,没有人说就因为求别人而什么都不顾,把自己贬的一文不值,就算求别人的人也是人,也是生而平等.不要用求别人就自己都不是这种迂腐的传统观念毒害别人和你自己.  俺说的是没有动脑子，不是没有脑子。另外，蓝色的字俺没看懂，哎。

user: user-0
content: 引用 11 楼 max_min_ 的回复:首先，说明下， 1 作为版主，也没有什么责任和义务帮助你的改成错误 2 没有嫌弃过谁基础好，谁基础差的问题在里面，只是说你基础不好，可以找本书看看基础知识   而不是调试出一个错误的问题，就问一个问题 3 说下问题  char *gets(char *s); 接收输入的是一个字符串，你是int 类型，所以会有问题！  再此gets函数是有风险的，没有安全检查，早已经被fgets代替了！  问题都说的很明显了， 你自己都不动手查查gets为什么不行  我基础差应该去看基础知识是应该的,但是你说话语气明显就给人感觉笔试基础差的人,你作为版主没有责任和义务帮助别人改错误,这是仁智之见,因为这也没有法律条文强制规定; 只是你可能连自己都不知道自己说话的语气态度给人带来厌恶,你可以给我建议,我也同样给你建议:       先学会怎么与人沟通,再去履行你的版主职责吧,一个连做人都不会的人是不会得到任何人尊重的.

user: user-7
content: 首先，说明下， 1 作为版主，也没有什么责任和义务帮助你的改成错误 2 没有嫌弃过谁基础好，谁基础差的问题在里面，只是说你基础不好，可以找本书看看基础知识   而不是调试出一个错误的问题，就问一个问题 3 说下问题  char *gets(char *s); 接收输入的是一个字符串，你是int 类型，所以会有问题！  再此gets函数是有风险的，没有安全检查，早已经被fgets代替了！  问题都说的很明显了， 你自己都不动手查查gets为什么不行

user: user-0
content: 引用 9 楼 max_min_ 的回复:[quote=引用 8 楼 zaixiankaifa 的回复:] [quote=引用 7 楼 max_min_ 的回复:] [quote=引用 6 楼 zaixiankaifa 的回复:] [quote=引用 5 楼 max_min_ 的回复:] [quote=引用 4 楼 zaixiankaifa 的回复:] [quote=引用 3 楼 hamiltonpro 的回复:] 你为什么 在  struct st s={"zhangsan",23,"man"};中的23不加个双引号呢？？？  咦,将23加了双引号就一切变正常了哦,为什么这样的呢?连警告都没有了[/quote] 因为你的age定义的是 char数组所以要加"" 如果你改成int 就不用加""了  struct st{ char name[10]; int age; char sex[10]; };[/quote]    我改成int之后: #include <stdio.h> #include <stdlib.h>  struct st{ 	char name[10]; 	int age[10]; 	char sex[10]; };   void out(struct st s) { 	printf("name=%s\n",s.name); 	printf("age=%d\n",s.age); 	printf("sex=%s\n",s.sex); }  void in(struct st s) {  	printf("please input your name:\n"); 		gets(s.name); 	printf("please input your age:\n"); 		gets(s.age);	 	printf("please input your sex:\n"); 		gets(s.sex); 	out(s); }    int main() {	 	struct st s={"zhangsan",23,"man"}; 	in(s); 	out(s); return 0; }  则无论是编译还是运行都有问题了 [/quote]  是改成 int age ,!! 不是 int age[10];[/quote]  改成int age的话,在gets(s.age)那里就出问题了,gets()要求char*参数,直接报错:Segmentation fault: 11.[/quote] 输入年纪可以改成scanf("%d", &s.age); 不用gets 楼主基础知识没过关啊！找本基础书看看吧！[/quote]      我也知道可以使用scanf("%d", &s.age),目前只是使用gets()函数问题有问题,版主不要转移问题方向掩盖之前自己建议的错误.      如果说基础知识没过关的人不允许在这里寻求解答疑惑的话,那么这个论坛的初衷是为了什么? 不要对不起你的版主头衔,作为版主你的责任和义务就是帮助有需要帮助的人,如果嫌弃基础差的人在这里寻求解答疑问的话,该论坛大可以直接在首页写着:本论坛不欢迎基础差的人来此论坛!

user: user-0
content: 引用 15 楼 jiandingzhe 的回复:[quote=引用 14 楼 zaixiankaifa 的回复:] [quote=引用 13 楼 jiandingzhe 的回复:] [quote=引用 12 楼 zaixiankaifa 的回复:] [quote=引用 11 楼 max_min_ 的回复:] 首先，说明下， 1 作为版主，也没有什么责任和义务帮助你的改成错误 2 没有嫌弃过谁基础好，谁基础差的问题在里面，只是说你基础不好，可以找本书看看基础知识   而不是调试出一个错误的问题，就问一个问题 3 说下问题  char *gets(char *s); 接收输入的是一个字符串，你是int 类型，所以会有问题！  再此gets函数是有风险的，没有安全检查，早已经被fgets代替了！  问题都说的很明显了， 你自己都不动手查查gets为什么不行  我基础差应该去看基础知识是应该的,但是你说话语气明显就给人感觉笔试基础差的人,你作为版主没有责任和义务帮助别人改错误,这是仁智之见,因为这也没有法律条文强制规定; 只是你可能连自己都不知道自己说话的语气态度给人带来厌恶,你可以给我建议,我也同样给你建议:       先学会怎么与人沟通,再去履行你的版主职责吧,一个连做人都不会的人是不会得到任何人尊重的.[/quote] 基础差应当自己回去好好看文档。你不应当期望别人有耐心解决一些非常细碎的问题，而那些问题是你理应自己解决的。[/quote]  基础差就不能得到耐心详解的解答? 每个人都是平等的,每个人生而为人,都不应该自恃自己知道多而去看不起知道少的人. 假设如你所说基础差的人就自己闷头在家看书的话,每个人都不应该去学校上学了,因为上学之前我们都是什么都不懂,基础差.哪怕幼儿园的老师也不会对小孩子说:你基础差,自己回家看书去吧. 不要去做一些明显看起来就很露骨的事情,人品很容易通过一个人的行为举止看出来.             C语言的发明者会对着全世界编程人员说吗:你们C语言的基础都不如我好,你们都回家看书吧.[/quote] 这里不是学校，也不是幼儿园，论坛用户不是你的老师，没人有义务教你基础知识。所以不要抱怨别人的耐心。 这是所有技术论坛的潜规则。[/quote]  不要拿"潜规则"出来当很光荣的事情,这种所谓的潜规则还不怕丢人丢到骨子里面

user: user-0
content: 引用 15 楼 jiandingzhe 的回复:[quote=引用 14 楼 zaixiankaifa 的回复:] [quote=引用 13 楼 jiandingzhe 的回复:] [quote=引用 12 楼 zaixiankaifa 的回复:] [quote=引用 11 楼 max_min_ 的回复:] 首先，说明下， 1 作为版主，也没有什么责任和义务帮助你的改成错误 2 没有嫌弃过谁基础好，谁基础差的问题在里面，只是说你基础不好，可以找本书看看基础知识   而不是调试出一个错误的问题，就问一个问题 3 说下问题  char *gets(char *s); 接收输入的是一个字符串，你是int 类型，所以会有问题！  再此gets函数是有风险的，没有安全检查，早已经被fgets代替了！  问题都说的很明显了， 你自己都不动手查查gets为什么不行  我基础差应该去看基础知识是应该的,但是你说话语气明显就给人感觉笔试基础差的人,你作为版主没有责任和义务帮助别人改错误,这是仁智之见,因为这也没有法律条文强制规定; 只是你可能连自己都不知道自己说话的语气态度给人带来厌恶,你可以给我建议,我也同样给你建议:       先学会怎么与人沟通,再去履行你的版主职责吧,一个连做人都不会的人是不会得到任何人尊重的.[/quote] 基础差应当自己回去好好看文档。你不应当期望别人有耐心解决一些非常细碎的问题，而那些问题是你理应自己解决的。[/quote]  基础差就不能得到耐心详解的解答? 每个人都是平等的,每个人生而为人,都不应该自恃自己知道多而去看不起知道少的人. 假设如你所说基础差的人就自己闷头在家看书的话,每个人都不应该去学校上学了,因为上学之前我们都是什么都不懂,基础差.哪怕幼儿园的老师也不会对小孩子说:你基础差,自己回家看书去吧. 不要去做一些明显看起来就很露骨的事情,人品很容易通过一个人的行为举止看出来.             C语言的发明者会对着全世界编程人员说吗:你们C语言的基础都不如我好,你们都回家看书吧.[/quote] 这里不是学校，也不是幼儿园，论坛用户不是你的老师，没人有义务教你基础知识。所以不要抱怨别人的耐心。 这是所有技术论坛的潜规则。[/quote]    我没有要求任何人有耐心教我基础知识,也没有这样的法律条文允许,只不过这反映了一个人的素质而已!

user: user-8
content: 明明编译器有警告，要认真对待...