我是stackoverflow的新手。
我有一个像这样的未知大小的字符串的二维数组。
char **table = NULL;
table = myfunc(); // Table now contains something like {"Merry","Leo","Linus"...}
有没有办法用这样的循环打印这个数组?
int i = 0;
while(????){ // Is there a condition i can use here to loop the list?
printf("%s", table[i]);
i++;
}
所以我得到了下面的输出。
Merry
Leo
Linus
提前致谢。
答案 0 :(得分:3)
否强>
其他选择:
将变量的地址传递给函数,并将其设置为函数中数组中的元素数:
int
然后,条件可能是:
char **table = NULL;
size_t n;
table = myfunc(&n);
使用一些特殊值标记数组的结尾,例如while(i < n) { … }
:
NULL
然后,条件可能是:
char **table = NULL;
table = myfunc(); // Table now contains something like {"Merry","Leo","Linus", …, NULL}
注意:在这两种选择中,请勿忘记while(table[i]) { … }
i
。
答案 1 :(得分:0)
你可以使用哨兵。修改您的myfunc
以在最后一个元素后添加NULL
。您的数组看起来像{"Merry", "Leo", ...., NULL}
现在,你可以这样迭代:
int i = 0;
while (table[i] != NULL)
{
printf("%s", table[i]);
i++;
}
小心,使用基于哨兵的解决方案,你会遇到一些麻烦,比如字符串:你确定哨兵是否正确设置,即数据源是否安全?如果没有,我建议您添加限制:while(i < MAX && table[i] != NULL)
。
答案 2 :(得分:0)
您可以在函数main中使用C标准使用的模型。
主要的标准声明是
int main( int argc, char * argv[] )
{
//...
}
argv[argc]
始终等于NULL。使用此事实,您可以通过以下方式输出主要的所有参数
#include <stdio.h>
int main( int argc, char * argv[] )
{
while ( *argv ) puts( *argv++ );
}
所以你的程序需要的是字符串数组的最后一个元素等于NULL
。
在这种情况下,你可以写
char **table = NULL;
table = myfunc();
for ( char **p = table; *p; ++p ) puts( *p );
另一种方法是编写函数,使其报告数组中元素的数量。在这种情况下,函数可以声明为
size_t myFunc( char ***table );
或喜欢
char ** myFunc( size_t *n );
并调用
size_t n = myFunc( &table );
或
size_t n;
table = myFunc( &n );