【问题标题】:Cast to pointer from integer of different size从不同大小的整数转换为指针
【发布时间】:2014-02-11 10:24:26
【问题描述】:

我正在尝试将 int 作为值插入到 gtree,它来自 glib。我不知道我应该如何分配和插入它。在这里你可以看到我的尝试:

void readFilec(GTree *tree)
{
  FILE *fp = fopen("cfg/file.csv", "rb" );
  char * line = NULL;
  size_t len = 0;
  ssize_t read;

  if (fp == NULL)
  exit(EXIT_FAILURE);
  char *p1;
  int  p2;
  while ((read = getline(&line, &len, fp)) != -1)
  {
    printf("%s", line);
    p1 = strtok(line, "|");
    p2 = (int)atoi(strtok(NULL, "|"));
    g_tree_insert(tree,(gpointer *) g_strdup(p1), (gpointer *)  p2);

    printf("-%s%d ", p1, p2);

  }

  if (line)
  free(line);
  //exit(EXIT_SUCCESS);

}

我读到的文件是这样的:

cfg/file.csv
AA1.E|1 
AA2.E|2

【问题讨论】:

  • 形成你为|创建的文件strtok(),但它在你的代码中似乎有两次,而在文件中它是一个。所以它也不正确,你可以传递char。
  • @JKB 应该怎么写?
  • p1 = strtok(line, "|"); 是对的,但第二个可能是 p2 = (int)atoi(strtok(NULL, " "));。否则插入的值错误。

标签: c glib


【解决方案1】:

尝试删除gpointer后的*,因为它已经是一个void*并在p2前面添加'&'以获得它的地址。

g_tree_insert(tree, (gpointer) g_strdup(p1), (gpointer)  &p2);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    相关资源
    最近更新 更多