在C中定义和初始化字符串数组

托尼乔西

我试图使用一个函数定义和初始化字符串数组,但是,该函数在为每个指针分配内存时导致分段错误。

请在下面找到该代码的最低可复制版本:

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

#define COL     100
#define ROW     10

int init_arr(char ***arr_ptr) {
    *arr_ptr = malloc(sizeof(char *) * ROW);

    for(int temp_iter = 0; temp_iter < ROW; ++temp_iter) {
        *arr_ptr[temp_iter] = malloc(COL + 1);
        strncpy(*arr_ptr[temp_iter], "MY_STRING_IS_THIS", COL);
    }

    return 0;
}

int main() {
    char **arr_of_str = NULL;
    init_arr(&arr_of_str);

    for(int temp_iter = 0; temp_iter < ROW; ++temp_iter) {
        printf("\nData: %s", arr_of_str[temp_iter]);
    }
}

当该函数拆分为2,第一个函数定义它,第二个函数初始化它时,此代码可以正常工作。

巴吉克

问题出在这里*arr_ptr[temp_iter],首先取消引用(在他的情况下为订阅)是在方括号中,然后是从asterix。您想要做的就是将这些取消引用分开,以便首先应用asterix,然后使用from框括起来,如下所示:

int init_arr(char*** arr_ptr) {
    *arr_ptr = (char**) malloc(sizeof(char *) * ROW);

    for(int temp_iter = 0; temp_iter < ROW; ++temp_iter) {
        (*arr_ptr)[temp_iter] = (char*) malloc(COL + 1);
        strncpy((*arr_ptr)[temp_iter], "MY_STRING_IS_THIS", COL);
    }

    return 0;
}

另外,由于malloc总是返回void *,因此您需要将指针从malloc转换为适当的指针,并且稍后将取消引用void指针。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Julia中定义和初始化二维字符串数组?

在C中动态初始化字符串数组

零初始化字符串和字符串数组(C ++)

字符数组的初始化字符串太长C

初始化枚举中的字符串数组

在Rust中初始化字符串数组

在VBA中声明和初始化字符串数组

Java中的字符串初始化和连接

如何在C#中初始化字符串数组列表?

如何在ONE GO AFTER声明中初始化字符串数组?C#

用字符串初始化的C中的静态char数组

初始化由C中的枚举索引的字符串数组

在c中初始化字符串数组的不同方法

在C ++中初始化字符串

C 字符串中的无效初始化程序

用字符串变量初始化字符数组

C中的字符数组初始化

C:初始化字符指针(字符串)数组,并使用fgets在文件中迭代以将值放入这些字符串中

通过字符串引用数组元素,并在awk中初始化数组

字符字符串数组的初始化程序中的问题

如何在 C++ 中使用 for 循环初始化字符或字符串数组?

设置2D字符数组时,如何修复“字符数组的初始化程序字符串太长”和“字符数组初始化程序中的多余元素”

Jasmin字符串声明/初始化错误数组

初始化向量字符串数组时出错

从字符串数组初始化pydantic Literal

用\ 0初始化字符串数组

初始化具有未知数字和未知长度的字符串数组

在C ++中,用字符串文字初始化char数组是一个好习惯吗?

使用核心数据从初始化程序中的字符串数组中减去 Stings?