【发布时间】:2016-06-26 13:24:54
【问题描述】:
我想打印一个大小未知的字符串数组,例如 {"Green", "Yellow", "Black", "White", "Purple", "Saphire", .....} 并且可能没有 NULL 结尾。 我的代码如下:((char **) 必须是 PrintStringArray 的参数)
void PrintStringArray(char **list) {
int i = 0;
for (;; i++) {
char *p = list[i];
while (*p)
putchar((*p++));
putchar('\n');
}
}
void main()
{
char *list[] = {"Green", "Yellow", "Black", "White", "Purple", "Saphire"};
PrintStringArray(list);
return;
}
但结果是,
绿色
黄色
黑色
白色
紫色
蓝宝石
分段错误(核心转储)
如何避免分段错误?
我可以要你的 cmets 吗?
谢谢,
【问题讨论】:
-
你不能那样做。您必须单独传递大小。
-
你不能。要么需要将数组长度传递给函数,要么数组必须具有终止标记值(正如您正确提到的那样)。
-
或者有一个结束标记,比如
"FIN"/"END"... -
好吧,你可以。毕竟,您示例中的列表是不变的。想想 int numStrings = sizeof(list)/sizeof (list[0]); - 这将为您提供数组中元素的数量。
-
@tofro:这是不正确的,
PrintStringArray没有收到带有任何此类类型信息的list。为什么不亲自尝试一下?
标签: arrays c pointers c-strings function-definition