【问题标题】:C: Passing nested structure array to functionC:将嵌套结构数组传递给函数
【发布时间】:2017-02-18 22:55:53
【问题描述】:

因为我无法删除:此代码有效,但我在代码中搞砸了循环!

将这种结构传递给函数的方法是什么,以便 char 数组 将被引用(实际值)更改?

结构如下所示:

#define CMAX 20
typedef struct product_struct
{
    char name[CMAX];
    int code;
}product_struct;

typedef struct shop_struct
{
    prodcut_struct product[CMAX];
    int productCount;
}shop_struct;

通常的函数声明不能​​解决问题:

void funct(shop_struct *shop);

至少当我尝试复制其中的内容时它不起作用:

strcpy((shop + i)->product[j].name, someString);

这样,我可以访问函数的名称,但值消失了。我应该如何解决这个问题?

示例代码:

struct_shop shop[10];
void funct(shop_struct *shop)
{
    (shop + 0)->product[0].code = 200; //This works!
    strcpy((shop + i)->product[j].name, someString); //This works'ish
}
printf("%d", shop[0].product[0].code); //This works!
printf("%s", shop[0].product[0].name); //This does not work!

【问题讨论】:

  • 请提供minimal reproducible example。您发布的代码没有明显问题。
  • 这意味着shop 可能不是指的是正确分配的struct
  • @StoryTeller,我在帖子中写出了我的问题。此代码未按预期工作。是的,它可以编译,但它没有做它应该做的事情。
  • “我的代码没有按预期工作” 不是一个有用的问题陈述。当您发布的代码中缺少如此多的细节时,它就更没用了。阅读有关 MCVE 的整个页面,然后发布一个。这不仅仅是关于可编译性。您必须在帖子中有足够的内容,以便任何人都可以重现您的问题。

标签: c arrays struct char structure


【解决方案1】:

它应该工作。这是一个工作示例:

#define CMAX 20
typedef struct product_struct
{
    char name[CMAX];
    int code;
} product_struct;

typedef struct shop_struct
{
    product_struct product[CMAX];
    int productCount;
} shop_struct;


void rename_at(int n, shop_struct* shop, char const* name)
{
    strncpy(shop->product[n].name, name, CMAX);
}

int main()
{
    shop_struct shop = {0};
    strcpy(shop.product[0].name, "product0");
    puts(shop.product[0].name); //prints product0
    rename_at(0,&shop,"new_product0");
    puts(shop.product[0].name); //prints new_product0


}

【讨论】:

  • 确实如此。 strncpy 是一个带有长度检查的strcpy,但没有什么能阻止您使用未检查的strcpy
  • 感谢您的帮助。我刚刚发现我是一个无法处理循环的大白痴,所以我的问题毕竟不是复制......对不起,如果我浪费了你的时间。
猜你喜欢
  • 2011-04-06
  • 2019-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-24
  • 1970-01-01
相关资源
最近更新 更多