C语言如何实现[常量字符串数组]作为函数参数

发布于 2022-09-12 23:45:30 字数 497 浏览 38 评论 0

//期待这样一个函数,能直接以这样的形式来传参:{"aaa","bbb","ccc"}
void clone(char ** arr, char * const strArr)
{
  arr[0] = (char *)malloc(strlen(strArr[0]));
  strcpy(arr[0],strArr[0]);
}
//调用
char ** arr0 = (char *)malloc(sizeof(char *));
clone(arr0,{"aaa","bbb","ccc"};

//不知道是传参数出问题还是函数写法问题
//提示error: expected expression before '{' token
另外,arr[0] = (char *)malloc(strlen(strArr[0]))
为什么可以省略sizeof(char *)也运行正常?
按理来说,strlen出来的只是个数

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

撩发小公举 2022-09-19 23:45:30

clone(arr0,{"aaa","bbb","ccc"};

改为

clone(arr0,"{\"aaa\",\"bbb\",\"ccc\"}");
简美 2022-09-19 23:45:30

这种内存使用方存在一定风险

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void clone(char **arr, const char **strArr, size_t cnt)
{
    for (size_t i=0; i<cnt; ++i)
        arr[i] = strdup(strArr[i]);
}

int main()
{
    char **arr0 = (char **)malloc(sizeof(char *));

    const char * const strArr[3] = {"123", "456", "789"};

    clone( arr0, (const char**)strArr, sizeof(strArr) / sizeof(*strArr));

    for (size_t i=0; i<sizeof(strArr) / sizeof(*strArr); ++i)
        printf("%s\n", arr0[i]);

    return 0;
}

输出:

123
456
789

其它说明

clone(arr0, "aaa", "bbb", "ccc");

如果想使用此种接口,可考虑使用可变参数列表实现,同样存在使用风险
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文