-1

谁能告诉我为什么结构数组不能正确打印出来?

我认为这与我分配给我不确定的结构的内存有关!

使用 mac osx 山狮 xcode 4 gcc

感谢您完全卡住的任何帮助!(请耐心等待,我只是学生!)

#include <stdio.h>
#include <limits.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>



typedef struct{
char* one;  
char* two;
 } Node;

 Node *nodes;
 int count = 0;


 //-----------------------------------------------------------------------
 void add(char *one,char*two){

 char x[40];
 char y[40];

 printf("reached..\n");

 strcpy(x,one);
 strcpy(y,two);


 printf("--> X: %s\n",x); 
 printf("--> Y: %s\n",y); 

 Node newNode;
 newNode.one = x;
 newNode.two = y;
 nodes[count]= newNode;

 count++;
 }
 //-----------------------------------------------------------------------

 //-----------------------------------------------------------------------
void print(){

 int x;
 for (x = 0; x < 10; x++)
 {
   printf("%d : (%s, %s) \n",x,nodes[x].one, nodes[x].two);
 }

 }

 //-----------------------------------------------------------------------

 //-----------------------------------------------------------------------
 void check(char **arg)
 {

if(strcmp(*arg, "Add") == 0)
{

add(arg[1],arg[2]);

}else if(strcmp(*arg,"print") == 0)
{

 print();
}else{
    printf("Error syntax Enter either: \n Add [item1][item2]\n OR \n print\n");
}

 }
 //-----------------------------------------------------------------------
 void readandParseInput(char *line,char **arg)
 {  

  if (fgets (line, 512, stdin)!= NULL) {  


  char * pch;
  pch = strtok (line," \n\t");
  int count = 0;
  arg[0] = pch;

  while (pch != NULL)
   {
   count++;
   pch = strtok (NULL, " \n\t"); 
   arg[count] =pch;
   }


}else{
printf("\n");
exit(0);
  }

 }

 //-----------------------------------------------------------------------

 int main() 
{


 int size = 100;
 nodes = calloc(size, sizeof(Node));

 int i;
 for(i = 0;i <100; i++){

 printf("%s , %s \n",nodes[i].one,nodes[i].two );
 // nodes[i].one = ".";
 // nodes[i].two = ".";
 }


 char  line[512];             /* the input line                 */
 char  *arg[50];              /* the command line argument      */

while (1) 
{ 
  readandParseInput(line,arg);
  if(arg[0] != NULL){
    check(arg);
    }

 }

return(0);
}
4

4 回答 4

0

您保留指向以下自动变量的指针:

 char x[40];
 char y[40];

这些在返回时超出范围add(),留下悬空指针。

您要么必须转换成数组Node::oneNode::two要么在堆上为它们分配内存。

于 2013-04-11T19:25:12.163 回答
0

在您add()的功能中,您不能通过=运算符将一个结构分配给另一个...您必须复制它...

memcpy( &nodes[count], &newNode )

于 2013-04-11T19:25:19.557 回答
0
#include <stdio.h>
#include <stdlib.h>

typedef struct {
    char *fn;
}NAME;

#define NAME_LEN 20

int main()
{
    NAME name;

    name.fn = (char *) calloc(NAME_LEN, sizeof(char));

    strcpy(name.fn, "Namco");

    printf("Name: %s\n", name.fn);

    free(name.fn);

    return 0;
}

你不能只在 c 中分配这样的字符串

newNode.one = x;
newNode.two = y;

newNode.one 指的是什么???

于 2013-04-11T19:32:38.620 回答
0

在函数添加

 newNode.one = x;
 newNode.two = y;

 newNode.one = strdup(x);
 newNode.two = strdup(y);
于 2013-04-11T22:51:33.433 回答