gpt4 book ai didi

c - 如何打印数组中包含的结构元素

转载 作者:太空宇宙 更新时间:2023-11-04 07:50:24 25 4
gpt4 key购买 nike

我创建了一个结构数组作为全局变量。我在一个函数中初始化了数组,然后我可以从那里打印出结构的元素。我的问题是除了我用来初始化数组的函数之外,我无法在另一个函数(在我的例子中是 main() )中打印出数组的值。请问我怎样才能打印这些值?谢谢。

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

/*
*
*/
typedef struct s{
char *value;
} S;

S list[2];

void function( ){
char val1[] = "val1";
char val2[] = "val2";
S v1 = {val1};
S v2 = {val2};
list[0] = v1;
list[1] = v2;
printf("%s\n", list[1].value); //prints val2
}
int main(int argc, char** argv) {
function();
printf("%s", list[1].value); //prints nonsense
return 0;
}

我试过的:

  1. 我修改了 function() 以将 list 作为参数 (function (list)),并改为在 main() 中声明 list。它没有用。

  2. 我将函数修改为返回列表 (S* function()),但它不起作用。

  3. 我使用了一个整数数组(而不是结构,即 int list[2],将其声明为全局变量并在 function() 中对其进行了初始化)并且一切正常,表明问题出在我的方式上正在访问结构,但我无法弄清楚。

  4. 我在互联网上搜索过,但找不到类似的问题。

最佳答案

在您的函数 function 中,您将局部变量的地址分配给您的结构。从 function 返回后,此地址不再有效。您可以将其设为 static 或动态分配它。

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

typedef struct s
{
char *value;
} S;

S list[2];

void function( )
{
char val1[] = "val1";
char val2[] = "val2";
//Note that you are creating a copy of "val1" here which can be avoided by changing it to char *val1 = "val1";

list[0].value = malloc(strlen(val1)+1); //allocate space for val1 + NUL-terminator
strcpy(list[0].value, val1); //copy string
list[1].value = malloc(strlen(val2)+1);
strcpy(list[1].value, val2);

//You could also use the function strdup which allocates memory and duplicates the string
//list[0].value = strdup(val1);

printf("%s\n", list[1].value); //prints val2
}

int main(int argc, char** argv)
{
function();
printf("%s", list[1].value);

free(list[0].value); //Don't forget to free.
free(list[1].value);
return 0;
}

关于c - 如何打印数组中包含的结构元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54268826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com