Java和C代码之间的相似性

时间:2013-09-09 10:15:56

标签: c

我的任务是计算我使用C在文件中有多少不同的单词。我已经在Java中做了相同的任务,但我在C中做了一些困难。我已经阅读了很多关于指针和数组以及如何在构造函数中初始化它们但我仍然没有得到它,这就是我寻求帮助的原因。

这就是我在Java中的表现:

public class DataSet {

private String[] elements;
private int top;

public DataSet() {
    elements = new String[1];
    top = 0;
}

现在我正在尝试用C做同样的事情,这就是我的代码的样子:

我有两个类,第一个是DataSet.h:

typedef struct _DataSet {
    char *elements;
    int top;
} DataSet;

和第二个DataSet.c

#include <stdlib.h>
#include <stdio.h>
#include "DataSet.h"   /*external libaray */

DataSet* createDataSet() 
{
  DataSet* d = malloc(sizeof(TextString));
  d -> elements = malloc(1 * sizeof(char));
  d -> top = 0;
  return d;
}

我有两个问题:

  1. 我的理解是正确的:我创建一个对象DataSet以便能够使用变量,然后我将指针设置为这个名为elements的新数组,其中可能包含一个字符串,然后我将top设置为0并且最后我回来了。
  2. 如果不正确我该怎么做才能使它与我的Java代码完全相同?

2 个答案:

答案 0 :(得分:2)

通常,如果您malloc使用DataSet之类的结构,则应确保分配的大小与结构的大小相同。

你的行

DataSet* d = malloc(sizeof(TextString));

肯定是错误的,但如果TextString比DataSet大,可能会出错。你真的应该写:

DataSet* d = malloc(sizeof(DataSet));

如果要像在Java代码中那样存储字符串数组,那么DataSet结构的这一行的类型是错误的:

char *elements;

请记住,在C中,字符串是一个字符数组。所以字符串数组是一个字符数组数组,如下所示:

char **elements;

此外,您不想像在行

中那样为一个字符分配空间
d -> elements = malloc(1 * sizeof(char));

而是要为指向字符的指针(字符串中的第一个)分配空间。

d -> elements = malloc(1 * sizeof(char *));

请注意,这不会为角色本身分配任何内存!

答案 1 :(得分:0)

你想为DataSet结构分配内存,所以这是:

DataSet* d = malloc(sizeof(struct _DataSet));

-

d -> elements = malloc(1 * sizeof(char));

这里你只为一个字符分配内存,我认为你需要一个字符串的内存:

d -> elements = malloc(n * sizeof(char)); // where n is the max length of your string

希望这会有所帮助