如何在c中为字符串创建类型定义

时间:2016-03-09 11:24:15

标签: c typedef

我有这个数据类型我叫 ItemType 这是一个字符串。

typedef <string> ItemType

我不确定将什么放入&#34;字符串&gt;&#34;部分。我尝试过以下方法:     typedef char[] ItemType和     typedef char* ItemType 它们都不起作用。

Itemtype 用于我在C中创建的arraylist,表示Arraylist的元素具有的数据类型。 arraylist本身是通用的,因为它接受 ItemType 并且在.c文件中实现,而 Itemtype 在.h头文件中。

编辑1 .c实施代码片段:

struct list_type {
    ItemType* data;
    int size;  
    int capacity;
};


// adds a component to the array, if enough memory available

void push(ListType listptr, ItemType item) {  
    if (listptr->size >= listptr->capacity) {
        ItemType * temp = malloc(sizeof(ItemType) * (listptr->capacity + 200));
        if (temp != NULL) {
              listptr->capacity += 200;
              memcpy(temp, listptr->data,sizeof(ItemType) * (listptr->size));
              free(listptr->data);
              listptr->data = temp;
              listptr->data[listptr->size] = item;
              listptr->size++;
              printf("%s inserted:%s ", item, listptr->data[listptr->size]);
        }
    }

    else {
         listptr->data[listptr->size] = item;
         listptr->size++;
         printf("%s inserted:%s ", item, listptr->data[listptr->size]);
    }

}

void printl(ListType listptr) {
  int i;
  for(i = 0; i < listptr->size; i++) printf("%s ", listptr->data[i]);
  printf("\n");

}

编辑.h标题文件摘要

typedef struct list_type *ListType;
typedef char* ItemType;
//other code
void push(ListType l, ItemType item);

2 个答案:

答案 0 :(得分:4)

这取决于你对“字符串”的意思。

如果你的意思是char数组可以传递给像strcpy()这样的函数,那很容易

  typedef char ItemType[10];

ItemType声明为char的数组,该数组可以保存strlen()返回9或更少的任何C样式字符串({{1}的差异}}是由于终止1终结符,字符串相关函数('\0'strcmp()strcat())寻找标记字符串的结尾。

限制是尺寸固定。将20个字符写入strlen()(例如使用ItemType)并且行为未定义。您有责任确保不会将太多字符写入strcpy()

如果您的某种类型可以容纳任意长度的字符串,您的代码必须管理事物以确保数据存储足够大,您可以执行以下操作:

ItemType

这个问题是你的代码需要管理指针指向的内存。 typedef char *ItemType; 是一个指针,而不是一个可以保存数据的数组。

ItemType

如果你想要一个可以根据需要自行调整大小的字符串类型(例如由其他一些语言提供),那么在C中就没有办法了。

答案 1 :(得分:1)

typedef char* ItemType  

实际上意味着ItemType = char *。

所以基本上你只为char *创建了另一个名字。 ItemType本身不是变量,而是数据类型。以下是typedef

的用法
int main()
{
    typedef char* itemType;

    itemType str = (char*) malloc(50);
    strcpy(str, "Hello World");

    printf("%s\n", str);

    return 0;
}