gpt4 book ai didi

c - 将字符串直接发送到宏与从数组发送的结果不同

转载 作者:太空宇宙 更新时间:2023-11-04 01:38:05 26 4
gpt4 key购买 nike

我认为有一些关于字符串的基本知识我不了解(C 的新手)。基本上我正在使用 uthash当我直接发送字符串而不是从循环(即从数组获取数据)时,它会起作用。

这是一个例子:

enum { MAX_ID_LEN = 5 };
struct my_struct {
char id[MAX_ID_LEN]; /* key */
float price;
UT_hash_handle hh; /* makes this structure hashable */
};
struct my_struct *users = NULL;

void new_stock(char *user_id, float price) {
//printf("%c - %f \n", *user_id, 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.. \n");
new_stock("IBM", 10.2);
new_stock("goog", 2.2);
return 0;
}

这行得通,但是当我尝试从一个数组做同样的事情时却不行(编译时我没有收到任何错误)。

char *name_all[] =  {"ibm", "goog"};
int name_all_size =sizeof(name_all)/sizeof(char);
float price_all[] = {10.2, 2.2};

enum { MAX_ID_LEN = 5 };
struct my_struct {
char id[MAX_ID_LEN]; /* key */
float price;
UT_hash_handle hh; /* makes this structure hashable */
};

struct my_struct *users = NULL;


void insert_data() {
printf("inserting data \n");
int data_loc;
for (data_loc=0;data_loc<name_all_size;data_loc++) {
//printf("%s - %f \n", name_all[data_loc], price_all[data_loc]);
//new_stock(name_all[data_loc], price_all[data_loc]);
//new try
struct my_struct *s;
s = (struct my_struct*)malloc(sizeof(struct my_struct));
strcpy(s->id, name_all[data_loc]);
s->price = price_all[data_loc];
//printf("%s - %f \n", s->id, s->price); //ahh displays correctly but still fails
HASH_ADD_STR( users, id, s ); /* id: name of key field */

}
}

int main() {
insert_data();
return 0;
}

我是 C 语言的新手,所以我可能认为这是错误的,但我认为这与我传递变量的方式有关。当我第一次尝试时,我将它发送到 new_stock 函数,但它只显示第一个字符,所以为了解决传递变量的问题,我只是将函数的所有内容移动到函数中我用来添加所有数据,但我仍然遇到同样的问题。

知道我做错了什么吗?

同样出于个人兴趣,是否有任何工具可以警告我代码中的问题?我发现 gcc 很有用,但是一旦警告停止,我就不知道如何排除故障了。有什么东西可以帮助我更早地发现这样的问题(比 gcc 更冗长的东西)。不确定是否可能,但想问一下。

最佳答案

这是你的错误:

char *name_all[] =  {"ibm", "goog"};
int name_all_size =sizeof(name_all)/sizeof(char);

数组 name_all 是一个 char 指针数组,而不是 char,因此如果您在32 位系统有 32 位指针,64 位系统有 16 字节有 64 位指针。请记住,指向的字符串文字未存储在数组中,只有指向字符串文字的指针在数组中。你真正想要的是:

int name_all_size = sizeof(name_all)/sizeof(char*);
^^^^^ note the pointer type

这应该会给您一个值 2,这是 name_all 中元素的正确数量。

关于c - 将字符串直接发送到宏与从数组发送的结果不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10902145/

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