【发布时间】:2025-12-03 22:15:02
【问题描述】:
这是我的代码:
#include <stdio.h>
typedef struct{
int n;
char l;
} dat;
void printa(dat* x){
while(*x != NULL){
printf("%c %d\n",x->l,x->n);
x++;
}
}
int main(int argc,char* argv[]){
dat new[10]={
{4,'d'},
{7,'g'},
{3,'c'},
{6,'f'},
{2,'b'},
{5,'e'},
{1,'a'}
};
dat* x=new;
printa(x);
return 0;
}
我正在尝试通过预先填充的结构显示值,以便稍后我可以对它们进行排序功能。
包含while(*x != NULL) 的行对编译器有问题。它声明error: invalid operands to binary !=。然后我把它改成了while(*x),以为我搞砸了指针的声明,编译器抱怨error: used struct type value where scalar is required。然后我继续将线路更改为while(x)。编译器还没有抱怨,执行代码会产生随机值以及分段错误。
然后我继续通过 gdb 运行错误的编译代码,它指出
程序收到信号SIGSEGV,分段错误。 0x0804838f in printa()
我可以通过修改我的代码以匹配以下内容来轻松解决我的问题:
void printa(dat* x){
int num=0;
while(num++ < 2){
printf("%c %d\n",x->l,x->n);
x++;
}
}
但我宁愿让结构数组完全通过(打印所有元素),而不是停在一个固定的数字。
【问题讨论】:
标签: c arrays loops pointers struct