繁体   English   中英

如何正确使用char **?

[英]how to use char ** properly?

我有两个示例,这两个示例中哪个更好,为什么? 在两种情况下,我都得到相同的结果。 我选择容器只是为了容纳字符串。

Example 1:

    char *c_ptr[] = {};
    int num;
    if (fill_array(c_ptr, &num) != 0) {
          cout << "Error" << endl;
    }
    for (int i = 0; i < num; i++) {
       cout << "Str[" << i << "] = " << c_ptr[i] << endl;
    } 
    // free pointer..

    // Function implementation 
    int fill_array(char *c_ptr[], int *count) {
        vector<string> v = {"haha", "hehe", "omg", "happy, learning!"};
        *count = v.size();
        int i = 0;

        for (vector<string>::iterator it = v.begin(); it != v.end(); it++, i++) {
            c_ptr[i] = (char*)malloc((*it).size() + 1);
            strncpy(c_ptr[i], (*it).c_str(),(*it).size() + 1);
        }
        return 0;
    }


Example 2:

    char **c_ptr = NULL;
    int num;
    if (fill_array(&c_ptr, &num) != 0) {
          cout << "Error" << endl;
    }
    for (int i = 0; i < num; i++) {
       cout << "Str[" << i << "] = " << c_ptr[i] << endl;
    } 
    // free double pointer..

    // Function implementation 
    int fill_array(char ***c_ptr, int *num) {
        vector<string> v = {"haha", "hehe", "omg", "happy, learning!"};
        *num = v.size();
        int i = 0;

        *c_ptr = (char **)malloc(*num * sizeof(char *));
        for (vector<string>::iterator it = v.begin(); it != v.end(); it++, i++) {
            c_ptr[i] = (char*)malloc((*it).size() + 1);
            strncpy(*c_ptr[i], (*it).c_str(),(*it).size() + 1);
        }
        return 0;
    }

结果

Str[0] = haha
Str[1] = hehe
Str[2] = omg
Str[3] = happy, learning!

另外数组中的空括号有什么用? 是良好的编程习惯还是动态分配?

**是指向指针的指针,或者我们可以说它是双指针。

当我们从main()或简单地将一个函数传递给另一个函数时,最好使用双指针。

通过查看您的代码,我想向您推荐一件事,那就是避免使用全局变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM