C语言结构体数组传入函数然后赋值的问题

klinsmann123456 2013-01-07 01:26:31
问一个菜鸟问题:
C语言结构体数组是如何传入一个函数,然后再对其数组中的元素赋值?
Typedef struct
{
char* name;
int id;
}Data;

int GetData(Data *data)
{
FILE *fp = fopen(pFilePath, "r");
char line[LINELEN];
SVPInt32 length = 0;
while(fgets(line, LINELEN, fp))
if(strncmp(line,"[VIDEO]",7) == 0)
{
while(fgets(line, LINELEN, fp))
if(strncmp(line, "NAME=", 5)== 0)
{
sscanf(line, "NAME=%[1-9a-zA-Z], ID=%5[^;]", data[length]->name, data[length]->id);

printf("name is %s, id is %s\n", data[length]->name, data[length]->id);
++length;
}
else
break;
}
}


输入的是一个结构体指针,想输出一个结构体数组的指针和数组的长度length,请问如何在函数中将结构体数组填满。
...全文
1405 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
樱木花道 2013-01-08
  • 打赏
  • 举报
回复
你的结构体不是数组, 你要重新定义下, 再根据数组全地址和数组首地址计算出数组长度 sizeof(a) / sizeof(&a[0]), DATA data[12];
AnYidan 2013-01-07
  • 打赏
  • 举报
回复
和别的数组一样
klinsmann123456 2013-01-07
  • 打赏
  • 举报
回复
恩,定义过Data data[100] = {0}了,不过我是在函数内部定义的。只能声明一个全局数组来输出吗?我想用一个数组的头指针来输出这个数组,也就是Data *data那里,就是不知道该怎么输出出去。 我之前一直用C++的,如果用C++的话直接传一个map进去就可以解决了,但是C没有map,所以只好用结构体指针,但是对这个又不太了解。sscanf那里是可以得到想要的数据的,就是不知道该怎么储存然后输出
季昂 2013-01-07
  • 打赏
  • 举报
回复
引用 3 楼 klinsmann123456 的回复:
恩,这里函数后面是有个return length的。name那里是我忘了分配空间了。 这里我主要是想问如何声明一个结构体数组以及如何给结构体数组中的元素的name和id通过那个sscanf函数赋值,然后再将元素添加进数组中。
1,声明一个结构体数组: .c文件中定义:Data data[100] = {0}; .h文件中声明:extern Data data[]; 2,name那里分配空间 3,楼主不是学java的吧?貌似sscanf不支持正则啊 %c 一个单一的字符 %d 一个十进制整数 %i 一个整数 %e, %f, %g 一个浮点数 %o 一个八进制数 %s 一个字符串 %x 一个十六进制数 %p 一个指针 %n 一个等于读取字符数量的整数 %u 一个无符号整数 %[] 一个字符集 %% 一个精度符号 至于如何弄进去,一时没有想到,建议还是自己分隔,不浪费脑细胞吧。
klinsmann123456 2013-01-07
  • 打赏
  • 举报
回复
恩,这里函数后面是有个return length的。name那里是我忘了分配空间了。 这里我主要是想问如何声明一个结构体数组以及如何给结构体数组中的元素的name和id通过那个sscanf函数赋值,然后再将元素添加进数组中。
季昂 2013-01-07
  • 打赏
  • 举报
回复
先不管你这个函数写的好与坏, 有这样几个问题。 1,data[length]这个length到底多长,也就是你的Data data[XX],XX多大,别写越界了。 2,每个data[n]中的name都分配空间了吗? char* name;是指针类型,如果外面没有给name分配空间的话, sscanf(line, "NAME=%[1-9a-zA-Z], ID=%5[^;]", data[length]->name, data[length]->id);之前,要先给data[length]->name = (char*)malloc(XXX)的空间,才能用。 3,至于期望长度,length,因为是局部变量,是带不出去的。 要么return (int)length;要么出去后,循环一遍data[XX],data[length]->name不为空的就是有内容啊,当然,前提是你把name初始化成NULL了,Data data[XX] = {0};一般就可以了。
pengyw 2013-01-07
  • 打赏
  • 举报
回复
你函数int GetData(Data *data) 就不知道数组有多长,怎么添啊?会不会越界啊?
The C programming Language 第二版英文版 內容列表 Table of Contents Preface.......................................................... Preface to the first edition..................................... Introduction..................................................... Chapter 1 - A Tutorial Introduction.............................. 1.1 Getting Started................................ 1.2 Variables and Arithmetic Expressions........... 1.3 The for statement.............................. 1.4 Symbolic Constants............................. 1.5 Character Input and Output..................... 1.5.1 File Copying.......................... 1.5.2 Character Counting.................... 1.5.3 Line Counting......................... 1.5.4 Word Counting......................... 1.6 Arrays......................................... 1.7 Functions...................................... 1.8 Arguments - Call by Value...................... 1.9 Character Arrays............................... 1.10 External Variables and Scope.................. Chapter 2 - Types, Operators and Expressions..................... 2.1 Variable Names................................. 2.2 Data Types and Sizes........................... 2.3 Constants...................................... 2.4 Declarations................................... 2.5 Arithmetic Operators........................... 2.6 Relational and Logical Operators............... 2.7 Type Conversions............................... 2.8 Increment and Decrement Operators.............. 2.9 Bitwise Operators.............................. 2.10 Assignment Operators and Expressions.......... 2.11 Conditional Expressions....................... 2.12 Precedence and Order of Evaluation............ Chapter 3 - Control Flow......................................... 3.1 Statements and Blocks.......................... 3.2 If-Else........................................ 3.3 Else-If........................................ 3.4 Switch......................................... 3.5 Loops - While and For.......................... 3.6 Loops - Do-While............................... 3.7 Break and Continue............................. 3.8 Goto and labels................................ Chapter 4 - Functions and Program Structure...................... 4.1 Basics of Functions............................ 4.2 Functions Returning Non-integers............... 4.3 External Variables............................. 4.4 Scope Rules.................................... 4.5 Header Files................................... 4.6 Static Variables................................ 4.7 Register Variables.............................. 4.8 Block Structure................................. 4.9 Initialization.................................. 4.10 Recursion...................................... 4.11 The C Preprocessor............................. 4.11.1 File Inclusion........................ 4.11.2 Macro Substitution.................... 4.11.3 Conditional Inclusion................. Chapter 5 - Pointers and Arrays.................................. 5.1 Pointers and Addresses......................... 5.2 Pointers and Function Arguments................ 5.3 Pointers and Arrays............................ 5.4 Address Arithmetic............................. 5.5 Character Pointers and Functions............... 5.6 Pointer Arrays; Pointers to Pointers........... 5.7 Multi-dimensional Arrays....................... 5.8 Initialization of Pointer Arrays............... 5.9 Pointers vs. Multi-dimensional Arrays.......... 5.10 Command-line Arguments........................ 5.11 Pointers to Functions......................... 5.12 Complicated Declarations...................... Chapter 6 - Structures........................................... 6.1 Basics of Structures........................... 6.2 Structures and Functions....................... 6.3 Arrays of Structures........................... 6.4 Pointers to Structures......................... 6.5 Self-referential Structures.................... 6.6 Table Lookup................................... 6.7 Typedef........................................ 6.8 Unions......................................... 6.9 Bit-fields..................................... Chapter 7 - Input and Output..................................... 7.1 Standard Input and Output....................... 7.2 Formatted Output - printf....................... 7.3 Variable-length Argument Lists.................. 7.4 Formatted Input - Scanf......................... 7.5 File Access..................................... 7.6 Error Handling - Stderr and Exit................ 7.7 Line Input and Output........................... 7.8 Miscellaneous Functions......................... 7.8.1 String Operations...................... 7.8.2 Character Class Testing and Conversion. 7.8.3 Ungetc................................. 7.8.4 Command Execution...................... 7.8.5 Storage Management..................... 7.8.6 Mathematical Functions................. 7.8.7 Random Number generation............... Chapter 8 - The UNIX System Interface............................ 8.1 File Descriptors............................... 8.2 Low Level I/O - Read and Write................. 8.3 Open, Creat, Close, Unlink..................... 8.4 Random Access - Lseek.......................... 8.5 Example - An implementation of Fopen and Getc.. 8.6 Example - Listing Directories.................. 8.7 Example - A Storage Allocator.................. Appendix A - Reference Manual.................................... A.1 Introduction................................... A.2 Lexical Conventions............................ A.2.1 Tokens................................ A.2.2 Comments.............................. A.2.3 Identifiers........................... A.2.4 Keywords.............................. A.2.5 Constants............................. A.2.6 String Literals....................... A.3 Syntax Notation................................ A.4 Meaning of Identifiers......................... A.4.1 Storage Class......................... A.4.2 Basic Types........................... A.4.3 Derived types......................... A.4.4 Type Qualifiers....................... A.5 Objects and Lvalues............................ A.6 Conversions.................................... A.6.1 Integral Promotion.................... A.6.2 Integral Conversions.................. A.6.3 Integer and Floating.................. A.6.4 Floating Types........................ A.6.5 Arithmetic Conversions................ A.6.6 Pointers and Integers................. A.6.7 Void.................................. A.6.8 Pointers to Void...................... A.7 Expressions.................................... A.7.1 Pointer Conversion.................... A.7.2 Primary Expressions................... A.7.3 Postfix Expressions................... A.7.4 Unary Operators....................... A.7.5 Casts................................. A.7.6 Multiplicative Operators.............. A.7.7 Additive Operators.................... A.7.8 Shift Operators....................... A.7.9 Relational Operators.................. A.7.10 Equality Operators................... A.7.11 Bitwise AND Operator................. A.7.12 Bitwise Exclusive OR Operator........ A.7.13 Bitwise Inclusive OR Operator........ A.7.14 Logical AND Operator................. A.7.15 Logical OR Operator.................. A.7.16 Conditional Operator................. A.7.17 Assignment Expressions............... A.7.18 Comma Operator.......................... A.7.19 Constant Expressions.................... A.8 Declarations..................................... A.8.1 Storage Class Specifiers................. A.8.2 Type Specifiers.......................... A.8.3 Structure and Union Declarations......... A.8.4 Enumerations............................. A.8.5 Declarators.............................. A.8.6 Meaning of Declarators................... A.8.7 Initialization........................... A.8.8 Type names............................... A.8.9 Typedef.................................. A.8.10 Type Equivalence........................ A.9 Statements....................................... A.9.1 Labeled Statements....................... A.9.2 Expression Statement..................... A.9.3 Compound Statement....................... A.9.4 Selection Statements..................... A.9.5 Iteration Statements..................... A.9.6 Jump statements.......................... A.10 External Declarations........................... A.10.1 Function Definitions.................... A.10.2 External Declarations................... A.11 Scope and Linkage............................... A.11.1 Lexical Scope........................... A.11.2 Linkage................................. A.12 Preprocessing................................... A.12.1 Trigraph Sequences...................... A.12.2 Line Splicing........................... A.12.3 Macro Definition and Expansion.......... A.12.4 File Inclusion.......................... A.12.5 Conditional Compilation................. A.12.6 Line Control............................ A.12.7 Error Generation........................ A.12.8 Pragmas................................. A.12.9 Null directive.......................... A.12.10 Predefined names....................... A.13 Grammar......................................... Appendix B - Standard Library.................................... B.1.1 File Operations................................ B.1.2 Formatted Output......................... B.1.3 Formatted Input.......................... B.1.4 Character Input and Output Functions..... B.1.5 Direct Input and Output Functions........ B.1.6 File Positioning Functions............... B.1.7 Error Functions.......................... B.2 Character Class Tests: ................. B.3 String Functions: ..................... B.4 Mathematical Functions: ................. B.5 Utility Functions: ....................

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧