如何在ANSI C程序中返回字符串数组?
例如:
#include<stdio.h>
#define SIZE 10
char ** ReturnStringArray()
{
//How to do this?
}
main()
{
int i=0;
//How to do here???
char str ** = ReturnStringArray();
for(i=0 ; i<SIZE ; i++)
{
printf("%s", str[i]);
}
}
答案 0 :(得分:3)
您可以执行以下操作。为简洁起见,省略了错误检查
char** ReturnStringArray() {
char** pArray = (char**)malloc(sizeof(char*)*SIZE);
int i = 0;
for ( i = 0; i < SIZE; i++ ) {
pArray[i] = strdup("a string");
}
return pArray;
}
请注意,您需要相应地释放返回的内存。
此外,在printf调用中,您可能希望在字符串中包含\n
以确保刷新缓冲区。否则,字符串将排队,不会立即打印到控制台。
char** str = ReturnStringArray();
for(i=0 ; i<SIZE ; i++)
{
printf("%s\n", str[i]);
}
答案 1 :(得分:2)
这样做
#include<stdio.h>
#define SIZE 10
char ** ReturnStringArray()
{
//How to do this?
char **strList = (char **)malloc(sizeof(char*) * SIZE);
int i = 0;
if (strList != NULL){
for (i = 0; i < SIZE; i++){
strList[i] = (char *)malloc(SIZE * sizeof(char) + 1);
if (strList[i] != NULL){
sprintf(strList[i], "Foo%d", i);
}
}
}
return strList;
}
main()
{
int i=0;
//How to do here???
char **str = ReturnStringArray();
for(i=0 ; i<SIZE ; i++)
{
printf("%s", str[i]);
}
}
上面的代码示例假定字符串的最大大小不会超过SIZE
的值,即长度为10个字节......
不要超出双指针的边界,因为它会崩溃
答案 2 :(得分:1)
请不要对malloc的返回进行类型转换,你没有包含<stdlib.h>
,并且正如上面有人指出的那样缺少原型会导致int被转换为char **。您的程序可能会或可能根本不起作用。