我無法弄清楚我做錯了什麼。我正在學習C,所以很抱歉,如果這顯然是錯誤的,但我試圖用uthash來製作股票及其價格的散列圖。但是當我將股票添加到我的散列圖時,出現上述錯誤。使整數指針沒有使用strcpy強制轉換
我所做的就是從他們的網站中拿出例子,並運行它來確保它能夠正常工作,一旦它按預期工作,我就改變了值以適應我的問題。在原始代碼中,結構體中的變量id
是一個整數,但我將其更改爲char(而不是數字,我想使用股票代碼作爲鍵),然後我開始出現以下錯誤:
../src/stackCsamples.c:87: warning: passing argument 1 of '__builtin_object_size' makes pointer from integer without a cast
../src/stackCsamples.c:87: warning: passing argument 1 of '__builtin_object_size' makes pointer from integer without a cast
../src/stackCsamples.c:87: warning: passing argument 1 of '__builtin___strcpy_chk' makes pointer from integer without a cast
../src/stackCsamples.c:87: warning: passing argument 1 of '__inline_strcpy_chk' makes pointer from integer without a cast
../src/stackCsamples.c:89: warning: passing argument 1 of 'strlen' makes pointer from integer without a cast
../src/stackCsamples.c:89: warning: passing argument 1 of 'strlen' makes pointer from integer without a cast
../src/stackCsamples.c:89: warning: passing argument 1 of 'strlen' makes pointer from integer without a cast
的問題似乎與這裏的兩行(87),這是strcpy(s->id, user_id);
和(89),它是:HASH_ADD_STR(users, id, s);
我如何使用這兩種錯誤的?我看起來strcpy了,它看起來像需要3件物品,但是當我添加的大小,我仍然得到錯誤。
這是我覺得部分的片段是相關的:
#include <stdio.h> /* gets */
#include <stdlib.h> /* atoi, malloc */
#include <string.h> /* strcpy */
#include "uthash.h"
struct my_struct {
char id; /* key */
float price;
UT_hash_handle hh; /* makes this structure hashable */
};
struct my_struct *users = NULL;
void new_stock(char *user_id, float price) {
struct my_struct *s;
s = (struct my_struct*)malloc(sizeof(struct my_struct));
strcpy(s->id, user_id);
s->price = price;
HASH_ADD_STR(users, id, s); /* id: name of key field */
}
int main() {
printf("starting..");
new_stock("IBM", 10.2);
new_stock("goog", 2.2);
return 0;
}
什麼是'user_id'?它是如何定義的?另外'HASH_ADD_STR'是如何定義的? –
@Als對不起,我不明白,我認爲在這種情況下,user_id只是我傳遞給函數的變量的名稱,在這種情況下,它是「IBM」還是「good」?我認爲'HASH_ADD_STR'是uthash包含的一個宏。它最初是HASH_ADD_INT,但我將其更改爲str,因爲我的主鍵不是int。 –
'strcpy'在目的地址和源字符串的地址中,該函數假設目的地足夠大以容納字符串。在你的情況下,目的地是一個「字符」,而源可能是一個字符串,你不能複製一個字符串到一個char,char('1 byte')中沒有足夠的內存來存放一個字符串。你可以將一個字符賦值給另一個,而不需要複製。 –