在C结构中分配char

时间:2015-09-17 22:22:10

标签: c struct char

基本上我有一个非常基本的问题......在C上有点新问题。我正在创建一个存储名称(字符串)及其类型的节点结构(char,或者' D&#39 ;或者' F')。字符串工作正常,字符似乎没有。

#include <stdlib.h>
#include <stdio.h>
#include <string.h>


char line[128];
char command[16], pathname[64];
char dirname[64], basename[64];

typedef struct {
  char name[64];
  char type;
  struct NODE *childPtr, *siblingPtr, *parentPtr;
} NODE;

NODE *root, *cwd;

initialize(){
  root = malloc(sizeof(NODE));
  strcpy(root->name, "/");
  root->type = 'D';
}  

main()
{
  while(1){
    printf("Input a command: ");
    gets(line);
    printf("Command inputed -> %s\n", line);
    printf("Root's name -> %s\n", root->name);
    printf("Root's type -> %c\n", root->type);
  }
}

现在当我这样做时,它打印出的名称就好了,但应该打印该类型的行上的Segmentation Faults。我也尝试使用&#34; root.type =&#39; D&#39;;&#34;定义类型。同样。

编辑:立即复制粘贴的确切代码。有些东西没有用,因为我只是在测试它的第一部分,还在进行中。

3 个答案:

答案 0 :(得分:1)

声明结构时出错...你拼错了struct作为'strcut'。

你还需要做

root = malloc(sizeof(*root));
...
free(root);//should be the last line
return 0;

编辑:不要使用gets(),几乎可以肯定你会遇到问题......

编辑2:函数initialize()应该返回类型void。然后你必须在main中调用该函数。应该是这样的。

#include <stdlib.h>
#include <stdio.h>
#include <string.h>


char line[128];
char command[16], pathname[64];
char dirname[64], basename[64];

typedef struct {
  char name[64];
  char type;
  struct NODE *childPtr, *siblingPtr, *parentPtr;
} NODE;

NODE *root, *cwd;

void initialize(){
  root = malloc(sizeof(*root));
  strcpy(root->name, "/");
  root->type = 'D';
}

main()
{
    initialize();
  while(1){
    printf("Input a command: ");
    fgets(line,128, stdin);
    printf("Command inputed -> %s\n", line);
    printf("Root's name -> %s\n", root->name);
    printf("Root's type -> %c\n", root->type);
    if (line[0] == 'q' && strlen(line)==2)break;//added so I can break loop....
  }
  free(root);
}

答案 1 :(得分:-1)

如果你遗漏了一些头文件而你拼错了struct,你还应该为结构释放已分配的内存。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {
    char name[64];
    char type;
} NODE;

NODE *root;

int main()
{
    root = malloc(sizeof(NODE));
    strcpy(root->name, "test");
    root->type = 'D';
    printf("Name = %s\n", root->name);
    printf("Type = %c\n", root->type);
    free(root);
    return 0;
}

答案 2 :(得分:-3)

typedef strcut应为 struct - &gt;那应该是编译错误

那应该这样做