我必须在c中编写一个函数,它将返回一个动态字符串数组。以下是我的要求:
答案 0 :(得分:1)
您可以使用malloc()分配任意长度的数组(在Java中类似于“new”),并使用realloc()使其增长或缩小。
你必须记住用free()释放内存,因为在C中没有garbarage收集器。
检查:http://www.gnu.org/software/libc/manual/html_node/Memory-Allocation.html#Memory-Allocation
编辑:
#include <stdlib.h>
#include <string.h>
int main(){
char * string;
// Lets say we have a initial string of 8 chars
string = malloc(sizeof(char) * 9); // Nine because we need 8 chars plus one \0 to terminate the string
strcpy(string, "12345678");
// Now we need to expand the string to 10 chars (plus one for \0)
string = realloc(string, sizeof(char) * 11);
// you can check if string is different of NULL...
// Now we append some chars
strcat(string, "90");
// ...
// at some point you need to free the memory if you don't want a memory leak
free(string);
// ...
return 0;
}
编辑2: 这是用于分配和扩展指向字符(字符串数组)的指针数组的示例
#include <stdlib.h>
int main(){
// Array of strings
char ** messages;
char * pointer_to_string_0 = "Hello";
char * pointer_to_string_1 = "World";
unsigned size = 0;
// Initial size one
messages = malloc(sizeof(char *)); // Note I allocate space for 1 pointer to char
size = 1;
// ...
messages[0] = pointer_to_string_0;
// We expand to contain 2 strings (2 pointers really)
size++;
messages = realloc(messages, sizeof(char *) * size);
messages[1] = pointer_to_string_1;
// ...
free(messages);
// ...
return 0;
}
答案 1 :(得分:0)
考虑创建适合您问题的适当类型。例如,您可以创建一个包含指针和sn整数长度的结构来表示动态数组。
答案 2 :(得分:0)
你有一些限制
examine()
的原型设计
功能和你的功能
来写 ? (我们称之为
validate()
)
你说你有10个examine()
函数,这是否意味着你在validate()
返回的数组中最多有10条消息/结果?
我是一名具有C背景的Java程序员,所以也许我可以为你强调一些事情:
C中没有Array.length的等价物:你必须提供一个边整数值来存储数组的有效大小
C数组不能“增长”:当数组增长或缩小时,你必须使用指针并分配/重新分配数组开始指针所指向的内存
您应该已经知道C中没有类或方法的概念,但您可以使用struct
,typedef
和函数指针来添加某种面向对象/通用性行为你的C程序......
根据您的需求和义务,数组可能是一个好的方式:或许您应该尝试找出一种在C中构建/查找等效的Java List接口的方法,以便您可以添加,删除/销毁或排序检查结果元素,而无需在每次操作结果集时重复内存分配/重新分配/释放代码(并且您应该使用结构/检查函数发送头文件来描述您所执行的操作无论如何,现在更准确地表达你的需求,以便我们引导你走向好的方向)
不要犹豫,提供更多信息或询问有关上述子弹点的具体信息;)