这个声明在C中有什么问题?

时间:2013-10-26 06:19:01

标签: c hashtable

我定义了一个结构。

typedef struct bucket {
    char *key;
    void *value;
    struct bucket *next;
} Bucket;

此函数在名为“htable.h”的文件中定义。

int put(Table *table, const char *key, void *value) {

    Bucket insertBucket;
    strcpy(insertBucket.key, key);

    return 0;
}

这不应该有效吗?

2 个答案:

答案 0 :(得分:3)

问题是你没有为字符指针key分配任何内存,而是试图将字符串复制到它。它给你不明确的行为 key只是一个未初始化的字符指针,它只是指向一个随机地址。为了能够使用任何指针,有两个条件:

  1. 它应指向有效的内存区域&
  2. 内存应保留供您使用(应归属)
  3. 你违反了两者。

答案 1 :(得分:1)

您需要分配一些空间来存储字符串。现在你只有一个原始指针。像这样:

char dest[80]; // arbitrary amount of space for example
strcpy(dest, key);

理想情况下,您希望在struct

中执行此操作
typedef struct bucket {
  char key[80];
  // .. other members ..
} Bucket;