gpt4 book ai didi

c - 将 char 指针传递给 C 中的函数。仅采用第一个位置

转载 作者:行者123 更新时间:2023-11-30 20:30:28 25 4
gpt4 key购买 nike

我有一个小问题。我想将字符串(字符指针)传递给函数。在函数中,我可以只传递 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;

在第一种情况下编译器会说

16: warning: passing argument 1 of 'strcpy' makes pointer from integer without a cast [-Wint-conversion]

第二种情况(带*)。编译器说:

16: warning: passing argument 1 of 'strcpy' makes pointer from integer without a cast [-Wint-conversion]

warning: passing argument 1 of 'strcpy' makes pointer from integer without a cast [-Wint-conversion]

编辑:

这是结构 DataItem

struct DataItem {
char key;
int value;
};

最佳答案

您的“struct DataItem”可以存储一个字符。它没有字符串存储空间。

所以首先,这里需要一个 char*,而不是 char。

struct DataItem {
char* key;
int value;
};

现在我们遇到的问题是必须有人负责创建和删除 key 。我建议您首先为 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);

关于c - 将 char 指针传递给 C 中的函数。仅采用第一个位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54245477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com