0

我正在尝试从键盘读取输入字符串并将其显示在 ncurses 的新窗口中。接收到的字符串被传递给函数 display。这个函数有一个链接列表。将该字符串与此链接列表结构的元素从列表顶部到末尾进行比较。如果找到匹配,它打印那些特定的列表元素,如果没有,它就会出来。

这是代码:

void main()
{
 char *str=(char*)malloc(10*sizeof(char));
 mvprintw (1,0, "%s","ivrcode:");
 mvscanw(1,8,"%s",str);
 mvprintw (1,8, "%s",str); 
 initscr ();
 cbreak();
 curs_set (2);
 clear();
 display1(str);
 refresh();


}


void display1(char *r)
{ char * status;
int   thisDTMF;
struct linklist * curser=listhead;
int count;
mvprintw (2,0, "%s","vId");
mvprintw (2,10, "%s","msisdn" );
mvprintw (2,25, "%s","ivrCode" );
mvprintw (2,35, "%s","state" );
mvprintw (2,45, "%s","DTMF" );
count = 4;
while(curser!=NULL)
{ status=getState(curser->state);
  thisDTMF=getDTMF(curser->dtmf);
  if(curser->ivrCode==r)
  { mvprintw (count,0,"%d",curser->vId);
  mvprintw (count,10,"%s",curser->msisdn);
  mvprintw (count,25, "%s",curser->ivrCode );
  mvprintw (count,35, "%s",status );
  if(thisDTMF==35||thisDTMF==42)
      mvprintw (count,45, "%c",thisDTMF );
  else
  mvprintw (count,45, "%d",thisDTMF );
  count++;
  }

      curser=curser->next;
}

 }

它也从键盘获取输入字符串并打印。
编译成功。
但是当我点击进入时它什么也没有显示。
有什么建议么?

4

1 回答 1

2
void main()
{
   char *str; <--- Declaration
   mvprintw (1,0, "%s","ivrcode:");
   mvscanw(1,8,"%s",str);
   mvprintw (1,8, "%s",str); <--- Used without initialzation
   ...
 }

在这里,您声明了指针str,但您没有对其进行初始化或为其分配任何值。然后你已经使用了它,所以它是未定义的行为。如果你说it worked well那就是未定义的行为。它看起来可以工作,它可以崩溃,产生错误的输出,无论如何......

如果您没有正确分配它,您期望它的输出是什么?

于 2013-09-05T06:12:42.763 回答