c语言如何让字符串做函数参数,将一个字符串数组作为参数传递给C中的函数

警告是正确的.你的函数想要一个指针数组.你给它一个数组的数组.

预期:

sep_foo:

+------+ +-----+

|char**|--> 0: |char*|-->"string1"

+------+ +-----+

1: |char*|-->"string2"

+-----+

*sep_foo_qty-1: |... |

+-----+

你提供的:

sep_foo:

+--------------------------------+

0: | char[MAX_STRING_LENGTH] |

+--------------------------------+

1: | char[MAX_STRING_LENGTH] |

+--------------------------------+

MAX_QTY-1: | ... |

+--------------------------------+

具有类型X的元素的数组可以“衰减”成指向X或X *的指针.但是X的值不能在该转换中改变.只允许一次衰减操作.你需要发生两次.在你的情况下,X是数组的MAX_STRING_LENGTH-chars.该函数希望X是指针到字符.由于这些不一样,编译器会警告您.我有点惊讶,这只是一个警告,因为编译器允许发生的事情没有任何好处.

在你的函数中,你可以编写这个代码:

char* y = NULL;

*sep_foo = y;

这是合法的代码,因为sep_foo是一个char **,所以* sep_foo是一个char *,y也是;你可以分配它们.但是用你试图做的,* sep_foo不会真的是一个char *;它会指向一个char数组.你的代码实际上会试图这样做:

char destination[MAX_STRING_LENGTH];

char* y = NULL;

destination = y;

您不能将指针分配到数组中,因此编译器会警告该调用并不好.

有两种方法可以解决这个问题:

>更改您在呼叫方声明和分配sep_foo的方式,以便它匹配函数期望接收的内容:

char** sep_foo = calloc(MAX_QTY, sizeof(char*));

for (int i = 0; i < MAX_QTY; ++i)

sep_foo[i] = malloc(MAX_STRING_LENGTH);

或等效地

char* sep_foo[MAX_QTY];

for (int i = 0; i < MAX_QTY; ++i)

sep_foo[i] = malloc(MAX_STRING_LENGTH);

>更改函数的原型以接受您真正给予的内容:

int parse(const char *foo, char sep_foo[MAX_QTY][MAX_STRING_LENGTH], int *sep_foo_qty);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值