我有这个数据类型我叫 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);
答案 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;
}