将char指针传递给C中的函数。只取第一个位置

将char指针传递给C中的函数。只取第一个位置,c,C,我有个小问题。我想向函数传递一个字符串(字符指针)。在函数中,我可以只传递char指针的第一个位置 以下是代码片段: void put(struct DataItem* hashArray[SIZE], char* key){ struct DataItem* item = malloc(sizeof(struct DataItem)); item->key = *key; item->value = 1; 因此,当我调用调试器并检查“item->key”的值时。然后它只是cha

我有个小问题。我想向函数传递一个字符串(字符指针)。在函数中,我可以只传递char指针的第一个位置

以下是代码片段:

void put(struct DataItem* hashArray[SIZE], char* key){
struct DataItem* item = malloc(sizeof(struct DataItem));
item->key = *key;
item->value = 1; 
因此,当我调用调试器并检查“item->key”的值时。然后它只是char指针的第一个位置

例如,我通过了“524234” 然后item->key就是“5”

编辑:
谢谢你的回复

你是说我必须像这样使用strcpy

void put(struct DataItem* hashArray[SIZE], char* key){
struct DataItem* item = malloc(sizeof(struct DataItem));
strcpy(item->key,key);
item->value = 1;
void put(struct DataItem* hashArray[SIZE], char* key){
struct DataItem* item = malloc(sizeof(struct DataItem));
strcpy(item->key,*key);
item->value = 1;
它不起作用。 即使我用这样的指针试一下

void put(struct DataItem* hashArray[SIZE], char* key){
struct DataItem* item = malloc(sizeof(struct DataItem));
strcpy(item->key,key);
item->value = 1;
void put(struct DataItem* hashArray[SIZE], char* key){
struct DataItem* item = malloc(sizeof(struct DataItem));
strcpy(item->key,*key);
item->value = 1;
在第一种情况下,编译器说

16:警告:传递'strcpy'的参数1将从整数生成指针,而不进行强制转换[-Wint转换]

在第二种情况下(使用*)。编者说:

16:警告:传递'strcpy'的参数1将从整数生成指针,而不进行强制转换[-Wint转换]

警告:传递'strcpy'的参数1会从整数生成指针,而无需强制转换[-Wint转换]

编辑:

这是结构数据项

struct DataItem {
    char key;
    int value;
};
“struct DataItem”具有一个字符的存储空间。它没有存储字符串的空间

首先,这里需要一个字符,而不是一个字符

struct DataItem {
    char* key;
    int value;
};
现在的问题是,必须有人负责创建和删除密钥。我建议您首先为DataItem创建一个typedef,以简化工作:

typedef struct {
    char* key;
    int value;
} DataItem;
然后编写如下两个函数:

DataItem* CreateDataItem (char* key, int value) {
    DataItem* item = malloc (sizeof (DataItem));
    char* copyKey = malloc (strlen (key) + 1);
    strcpy (copyKey, key);
    item->key = copyKey;
    item->value = value;
    return item;
}

void DestroyDataItem (DataItem* item) {
    free (item->key);
    free (item);
}
DataItem* item = CreateDataItem (key, 1);
现在您可以创建如下项目:

DataItem* CreateDataItem (char* key, int value) {
    DataItem* item = malloc (sizeof (DataItem));
    char* copyKey = malloc (strlen (key) + 1);
    strcpy (copyKey, key);
    item->key = copyKey;
    item->value = value;
    return item;
}

void DestroyDataItem (DataItem* item) {
    free (item->key);
    free (item);
}
DataItem* item = CreateDataItem (key, 1);

请做一份报告。数据项的定义是相关的。它似乎只包含
char
而不是
char*
。后者可以设置为
key
,而不是
*key
,从而将指针指向整个字符串。或者你需要字符串复制…问题是什么?为什么这是一个“小问题”?我认为您可能希望使用像
strcpy
这样的函数,而不是使用
*键取消对char指针的引用显示结构定义代码似乎执行了它应该执行的操作。如果代码是
item->key=*(key+1)
然后
item->key
将成为单个字符
'2'
(而不是字符串
'2'
)。