【问题标题】:Assigning string array to char**将字符串数组分配给 char**
【发布时间】:2015-01-02 15:00:53
【问题描述】:

我只是无法将字符串数组分配给我的 char** 指针。

我的字符串在char *tempArr[12];

但我不知道如何将它们分配给我的 char** arr 变量。

首先,我分配内存使用:arr = (char**)malloc(numberOfElements * sizeof(char*));

然后我尝试为每个元素分配内存:

arr[i] = malloc(256 * sizeof(char));

我也尝试只为 char 指针分配内存,但都不起作用。我的 arr 变量中的结果是 2 到 3 个无意义的字符。

可能出了什么问题?我尝试了所有能找到的东西,结果要么是崩溃,要么是无意义的内容。

编辑:对不起,我会尝试进一步澄清。背景是,我正在将文件中的数据加载到结构中。每个结构都有char** 变量,假设是保存字符串数组。

在我的阅读代码中,我正在使用我的临时数组char* tempArr[12] 并成功地将字符串加载到其中。然后我将它传递给创建结构的函数。

问题从这里开始,我试图“转换”我传递的数组,以便它可以存储在char** arr 变量中。

【问题讨论】:

  • 不清楚您要达到的目标。
  • 这个问题缺少太多东西,无法通过摇摆(wild-ass-guessing)提供准确的答案。你的arr = ... 是有道理的(更重要的是,如果你失去了演员阵容,出于某种奇怪的原因,你在那里做错了,但在你的arr[i] = ... 分配中是正确的)。如果它在某个函数范围内完全自包含,那么它看起来是正确的。如果char **arr 是一个函数输出参数,那么它是错误的。 Post an MCVE of the REAL problem.

标签: c arrays pointers


【解决方案1】:
char *tempArr[12];

是指针数组。所以如果你有类似的东西

tempArr[0] = malloc(20);
strcpy(tempArr[0],"hello");

那么在你做完之后你就可以做。即在分配内存给你的指针arr[i]

char **arr = malloc(numberOfElements * sizeof(char*));

arr[i] = malloc(256);

strcpy(arr[i],tempArr[0]);

您可以循环运行上述步骤以复制所有指针的值

【讨论】:

  • 是的,就是这样。谢谢。我的问题出在 for 循环中(我计算了元素的数量并且没有考虑该数组从零开始)所以当我尝试这个之前我认为它不起作用,而实际上问题出在其他地方:/
【解决方案2】:

我认为你的意思是以下

#include <string.h>

//...

size_t i;

char **arr = ( char** )malloc( numberOfElements * sizeof( char* ) );
for ( i = 0; i < numberOfElements; i++ ) arr[i] = malloc( 256 * sizeof( char ) );

for ( i = 0; i < sizeof( tempArr ) / sizeof( *tempArr ); i++ ) strcpy( arr[i], tempArr[i] );

【讨论】:

    猜你喜欢
    • 2015-06-25
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 2014-06-08
    • 2012-10-16
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    相关资源
    最近更新 更多