【问题标题】:how to print the contents of char**?如何打印char**的内容?
【发布时间】:2020-09-08 09:49:06
【问题描述】:

我有一个定义为包含字符串的 char** 数组的结构。我不知道如何对其内容运行 printf。

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

#ifndef STRUCT_STRING_ARRAY
#define STRUCT_STRING_ARRAY
typedef struct s_string_array
{
    int size;
    char** array;
} string_array;
#endif


void my_print_words_array(string_array* param_1)
{
    int len = param_1->size;
    char **d = param_1->array;


    for(int i = 0 ; i < len;i++){
        printf("%s\n", d[i]);
    }
}

int main(){
    struct s_string_array *d;
    d->size = 2;

    char **my_arr = (char *[]){"hello", "world"};//this init is fine
    d->array = my_arr;
    my_print_words_array(d);
    return 0 ;

}

主函数给了我段错误。怎么了?

【问题讨论】:

  • 你在哪里为结构分配内存?
  • @RobertHarvey 嗨,你的意思是它有效吗?没有复制?你的意思是我应该放一个可执行在线 ide 的链接?
  • 嗯...我倾向于同意托尼的观点。你没有为struct s_string_array *d;分配内存
  • 所以可能是UB。

标签: c pointers struct char c99


【解决方案1】:

声明指向结构的指针是没有意义的

struct s_string_array *d;

此外,未初始化且具有不确定的值,这进一步是未定义行为的原因。

你想要达到的目标如下

#include <stdio.h>

typedef struct s_string_array
{
    int size;
    char** array;
} string_array;

void my_print_words_array( const string_array *param_1 )
{
    for ( int i = 0; i < param_1->size; i++ )
    {
        puts( param_1->array[i] );
    }
}

int main( void )
{
    string_array d =
    {
        .size = 2,
        .array = (char *[]){"hello", "world"}
    };

    my_print_words_array( &d );

    return 0 ;

}

程序输出是

hello
world

【讨论】:

  • 使用char **的好例子不使用动态分配内存。
猜你喜欢
  • 2019-08-29
  • 2021-07-04
  • 2014-06-04
  • 2020-04-13
  • 2020-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多