由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - size不固定的struct怎么定义呀?
相关主题
初学C,对什么该free一直搞不明白这两种容器定义形式有区别吗?
大家新年好。 请教一个 c interview question为什么在overloading中,friend <<不能读取private值呢?
问个程序问题a weak c question, how to pass an array into a function?
这个怎么allocate memory?谁给解释一下这个c question
问个hash函数问题问一个 char * 和 char [] 的问题
c的问题(2)operator() overloading 一问
用STL map的时候怎么自己定义大小比较的关系c++面试问题
问个c++的template的问题基本功不扎实,问个问题
相关话题的讨论汇总
话题: struct话题: array话题: data话题: sizeof话题: numbers
进入Programming版参与讨论
1 (共1页)
b*********n
发帖数: 1258
1
Ansi C in Unix
我现在有一个struct要存储一些数字
但是有多少个数字是不确定的
需要程序的运行结果来确定
我要把这些数字save到一个file里面
然后另一个程序去open这个file
但是我不知道在存储那个struct的时候
怎么解决未知数目的问题
大家提点建议吧
g*****g
发帖数: 34805
2
use a pointer void*, and malloc at runtime.

【在 b*********n 的大作中提到】
: Ansi C in Unix
: 我现在有一个struct要存储一些数字
: 但是有多少个数字是不确定的
: 需要程序的运行结果来确定
: 我要把这些数字save到一个file里面
: 然后另一个程序去open这个file
: 但是我不知道在存储那个struct的时候
: 怎么解决未知数目的问题
: 大家提点建议吧

b*********n
发帖数: 1258
3
那第二个文件去打开这个文件的时候
怎么知道里面有多少个数字呢?

【在 g*****g 的大作中提到】
: use a pointer void*, and malloc at runtime.
g*****g
发帖数: 34805
4
If you are going to write out and read in again, it's even simpler.
Just write the number of numbers or sizeof(struct) into the file first.

【在 b*********n 的大作中提到】
: 那第二个文件去打开这个文件的时候
: 怎么知道里面有多少个数字呢?

b*********n
发帖数: 1258
5
如果我把sizeof(struct)先写进去的话
reader program 怎么知道里面有多少个数字?
还是需要write out 那个occurrence number.
有什么方法可以避免那个occurrence number吗?

【在 g*****g 的大作中提到】
: If you are going to write out and read in again, it's even simpler.
: Just write the number of numbers or sizeof(struct) into the file first.

c********e
发帖数: 383
6
我今天和乐点酒,头脑不是很清楚,凑合看吧。
struct Array
{
unsigned long length_;
int * data_
explicit Array ( const int num) : length_ (num)
{ data = static_castmalloc (sizeof(int)*length);}
~Array (void) {delete data_;}
void init (...) {//initialize ur arrary of int}
int operator [] (int i) { //check boundary maybe; return data[i]; }
private: //or protected
const A& operator=(const A&);
A(const &);
};
或者用vector得乐。要不自己写个templated struct. 还可以用new 来代替malloc.
或者overlaod operator new,或者用allocat

【在 b*********n 的大作中提到】
: 如果我把sizeof(struct)先写进去的话
: reader program 怎么知道里面有多少个数字?
: 还是需要write out 那个occurrence number.
: 有什么方法可以避免那个occurrence number吗?

g*****g
发帖数: 34805
7
You drink too much, you can't do this in C.

【在 c********e 的大作中提到】
: 我今天和乐点酒,头脑不是很清楚,凑合看吧。
: struct Array
: {
: unsigned long length_;
: int * data_
: explicit Array ( const int num) : length_ (num)
: { data = static_castmalloc (sizeof(int)*length);}
: ~Array (void) {delete data_;}
: void init (...) {//initialize ur arrary of int}
: int operator [] (int i) { //check boundary maybe; return data[i]; }

c********e
发帖数: 383
8
由没说非得用c
哈哈,walking in the cloud ah , 酒就是好,一醉万事休

first.

【在 g*****g 的大作中提到】
: You drink too much, you can't do this in C.
l*********o
发帖数: 3091
9
楼主一上来就说ANSI C

【在 c********e 的大作中提到】
: 由没说非得用c
: 哈哈,walking in the cloud ah , 酒就是好,一醉万事休
:
: first.

e***i
发帖数: 231
10
文件大小不是可以知道吗?
http://stackoverflow.com/questions/8236/how-do-you-determine-th

【在 b*********n 的大作中提到】
: 那第二个文件去打开这个文件的时候
: 怎么知道里面有多少个数字呢?

相关主题
c的问题(2)这两种容器定义形式有区别吗?
用STL map的时候怎么自己定义大小比较的关系为什么在overloading中,friend <<不能读取private值呢?
问个c++的template的问题a weak c question, how to pass an array into a function?
进入Programming版参与讨论
n******n
发帖数: 12088
11
又是女生来问作业?

【在 b*********n 的大作中提到】
: Ansi C in Unix
: 我现在有一个struct要存储一些数字
: 但是有多少个数字是不确定的
: 需要程序的运行结果来确定
: 我要把这些数字save到一个file里面
: 然后另一个程序去open这个file
: 但是我不知道在存储那个struct的时候
: 怎么解决未知数目的问题
: 大家提点建议吧

w***g
发帖数: 5958
12
struct Numbers {
size_t N;
float data[1]; /* 有的编译器要求数组长度至少为1 */
};
写的时候先把N写进去,然后fwrite(xx.data, sizeof(float), xx.N, file);
读的时候先把N读出来,然后
xx = (struct Numbers *)malloc(sizeof(struct Numbers) + (N-1) * sizeof(float)
);
然后xx里的data就可以当N个元素的素组用了。

【在 b*********n 的大作中提到】
: Ansi C in Unix
: 我现在有一个struct要存储一些数字
: 但是有多少个数字是不确定的
: 需要程序的运行结果来确定
: 我要把这些数字save到一个file里面
: 然后另一个程序去open这个file
: 但是我不知道在存储那个struct的时候
: 怎么解决未知数目的问题
: 大家提点建议吧

n******n
发帖数: 12088
13
直接float*不就完了?

float)

【在 w***g 的大作中提到】
: struct Numbers {
: size_t N;
: float data[1]; /* 有的编译器要求数组长度至少为1 */
: };
: 写的时候先把N写进去,然后fwrite(xx.data, sizeof(float), xx.N, file);
: 读的时候先把N读出来,然后
: xx = (struct Numbers *)malloc(sizeof(struct Numbers) + (N-1) * sizeof(float)
: );
: 然后xx里的data就可以当N个元素的素组用了。

k***5
发帖数: 583
14
2 step:
1. Saving as structure {int count; float []} to file
2. When read, you know the size of file, simply read the whole file to
buffer, the first 4 bytes is the count, then covert the rest of buffer to
knowing size array.
d****i
发帖数: 4809
15
这个应该是用指针来定义动态数组吧,如下
struct Numbers {
size_t N;
float *data;
};
struct Numbers numbers;
//read N in
scanf("%d", &numbers.N);
//create the new data array based on N
number.data = malloc(sizeof(float)*N);
//read data in
for(int i=0; i fscanf(pFile, "%f", &number.data[i]);
}

float)

【在 w***g 的大作中提到】
: struct Numbers {
: size_t N;
: float data[1]; /* 有的编译器要求数组长度至少为1 */
: };
: 写的时候先把N写进去,然后fwrite(xx.data, sizeof(float), xx.N, file);
: 读的时候先把N读出来,然后
: xx = (struct Numbers *)malloc(sizeof(struct Numbers) + (N-1) * sizeof(float)
: );
: 然后xx里的data就可以当N个元素的素组用了。

n*****3
发帖数: 1584
16
。恨就不用啦,
Linux 里 这种trick很多

【在 d****i 的大作中提到】
: 这个应该是用指针来定义动态数组吧,如下
: struct Numbers {
: size_t N;
: float *data;
: };
: struct Numbers numbers;
: //read N in
: scanf("%d", &numbers.N);
: //create the new data array based on N
: number.data = malloc(sizeof(float)*N);

x****u
发帖数: 12955
17
十年的老坑啊
n******n
发帖数: 12088
18
日。谁挖出来的

【在 x****u 的大作中提到】
: 十年的老坑啊
g*****g
发帖数: 34805
19
不知道,看似我十年前C还是很好的,现在完全不会了。

【在 n******n 的大作中提到】
: 日。谁挖出来的
x****o
发帖数: 21566
20
Zero length array?
z**********r
发帖数: 86
21
我是这么用的(verified on Ubuntu):
typedef struct
{
// fixed length data
int len;
// any varying length data should be put below
// note, you must be used data[] instead of *data
// because data[] does't take extra space; *data takes four bytes for the
pointer
char data[];
}Array;
// for allocate
int len=10;
Array *x=(Array *)malloc(len*sizeof(char)+sizeof(Array));
x->len=10;
// access the varying length part
x->data[0]='c';
// for deallocate
free(x);
A*******e
发帖数: 2419
22
这么用错的厉害。你只能把Array放在堆里。我想声明一个Array类型的局部变量怎么办
?而且可读性很差。
验证一个例子能说明什么问题?楼上用指针才是正解。

【在 z**********r 的大作中提到】
: 我是这么用的(verified on Ubuntu):
: typedef struct
: {
: // fixed length data
: int len;
: // any varying length data should be put below
: // note, you must be used data[] instead of *data
: // because data[] does't take extra space; *data takes four bytes for the
: pointer
: char data[];

1 (共1页)
进入Programming版参与讨论
相关主题
基本功不扎实,问个问题问个hash函数问题
一道 memset in C++的题c的问题(2)
question about const reference用STL map的时候怎么自己定义大小比较的关系
ask a c question问个c++的template的问题
初学C,对什么该free一直搞不明白这两种容器定义形式有区别吗?
大家新年好。 请教一个 c interview question为什么在overloading中,friend <<不能读取private值呢?
问个程序问题a weak c question, how to pass an array into a function?
这个怎么allocate memory?谁给解释一下这个c question
相关话题的讨论汇总
话题: struct话题: array话题: data话题: sizeof话题: numbers