c语言中 结构体中数组赋值问题

#include<stdio.h>#include<stdlib.h>#include<string.h>typedefstructhui{char*data;intto... #include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct hui{
char *data;
int top;
} *Hui;

int IsHui(char *s);

void main() {
char c[100];
printf("Enter:\n");
gets(c);
if(IsHui(c))
printf("Is\n");
else
printf("NO\n");
}

int IsHui(char *s) {
int n = strlen(s);
Hui S = (Hui)malloc((n/2)*sizeof(char)+sizeof(int));
S->top = -1;

for(int i = 0; i < n/2; i++) {
S->top++;
S->data[i] = s[i];//这一步使程序停止????为什么???

}
char temp;
i = i - 1;
while(S->top>=0) {
temp = S->data[i];
if(temp != s[n-i-1])
return 0;
i--;S->top--;
}
return 1;
}

这是我的回文游戏.为什么S->data[i] = s[i];这一步对结构体中的数组赋值运行不了???晕~~~
展开
 我来答
a62517741
2008-10-29 · TA获得超过468个赞
知道小有建树答主
回答量:334
采纳率:100%
帮助的人:481万
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct hui{
char data[20]; //你写的是指针,要开数组的话必须用malloc开空间,我是
//用直接改为数组了。
int top;
} *Hui;

int IsHui(char *s);

void main() {
char c[100];
printf("Enter:\n");
gets(c);
if(IsHui(c))
printf("Is\n");
else
printf("NO\n");
}

int IsHui(char *s) {
int n = strlen(s);
Hui S = (Hui)malloc((n/2)*sizeof(char)+sizeof(int));
S->top = -1;

for(int i = 0; i < n/2; i++) {
S->top++;
S->data[i] = s[i];//这一步使程序停止????为什么???

}
char temp;
i = i - 1;
while(S->top>=0) {
temp = S->data[i];
if(temp != s[n-i-1])
return 0;
i--;S->top--;
}
return 1;
}
聼说她来过m
2015-11-15 · TA获得超过142个赞
知道答主
回答量:66
采纳率:0%
帮助的人:7.5万
展开全部
  相同类型的结构体是可以直接赋值的,这是ANSI/ISO C规定的。ANSI/ISO C规定的合法行为,编译器是必须支持的。

但不能进行比较,例如
if (stu[1] == stu[2])是不允许的。

这种问题不能靠试验获得准确的答案,因为你用的编译器支持并不表明其他编译器也支持。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
_fmlyht
2008-10-29 · TA获得超过2359个赞
知道大有可为答主
回答量:2398
采纳率:0%
帮助的人:1822万
展开全部
以前也回答过这样的问题
S->data[i] = s[i];//没有初始化S->data,就想访问*(S->data+i),当然不可以,提到循环外改为S->data = s;这就对初始化了
你搜索下"数组与指针",网络上有关于这方面的讨论,
当然,除此之外,还有其他问题,建议还是重写吧!

参考资料: http://zhidao.baidu.com/question/72810782.html

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
muqsh
2008-10-29 · TA获得超过129个赞
知道小有建树答主
回答量:233
采纳率:0%
帮助的人:236万
展开全部
typedef struct hui{
char data[10];
int top;
} *Hui;

char *data;改成这样char data[10];就好了

这是因为没有为data分配足够空间
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式