获取char *数组的大小作为C ++函数的输入传递

时间:2011-07-12 19:41:12

标签: arrays char

我正在尝试将字符指针数组作为C测试驱动程序的输入传递给C ++函数(在C包装器中可用)

char* LowerList[10];
LowerList[0]="abc";
LowerList[1]="def";
LowerList[2]="hij";

当在C ++端可用时,元素显示的值显示为

char* LowerList[0]="abc";
LowerList[1]="def";
LowerList[2]="hij";
LowerList[3]=ƒì¶S<\$ UV<35?Ä@
LowerList[34]=ƒ<bad pointer>

我需要将数组的大小传递给我可以使用的C ++大小 while(LowerList [count])但由于垃圾值而无法执行此操作。 如果我能通过初始化,内存分配或将其转换为向量来找到char * LowerList []的正确大小,请通知我。

更正了上述错误错误代码

以下是我对目前给我的一些建议的评论:

1)将数组的大小作为参数传递 - 我的场景的限制.2)转换为向量需要大小可用3)我需要添加的位置的Sentinel值。如前所述,我正在尝试处理用户将值传递为3导致失败的情况。我没有任何控制来限制C用户使用C测试驱动程序的C ++包装器的方式。

2 个答案:

答案 0 :(得分:1)

如果我没有弄错的话,指针LowerList[3]LowerList[9]都是未初始化的。您可以始终只使用NULL作为标记值,​​并明确指定它或执行以下操作:

char* LowerList[10] = { "abc", "def", "hij" };

这应该将数组中的剩余指针初始化为NULL。


回应你的第二条评论:

#define LOWER_LIST_SIZE 10
#define MINIMUM_SIZE 2

#if LOWER_LIST_SIZE < MINIMUM_SIZE
    #error "LOWER_LIST_SIZE must be >= MINIMUM_SIZE"
#endif

char *LowerList[LOWER_LIST_SIZE] = // etc.

或类似的东西。

http://en.wikipedia.org/wiki/C_preprocessor#User-defined_compilation_errors_and_warnings

答案 1 :(得分:1)

此外,您给出的初始化完全错误。你有:

char* LowerList[10]; 
char* LowerList[0]="abc"; 
char* LowerList[1]="def"; 
char* LowerList[2]="hij";

你想要的是:

char* LowerList[10]; 
LowerList[0]="abc"; 
LowerList[1]="def"; 
LowerList[2]="hij";

或JAB的替代方案。你的版本的问题是你基本上声明LowerList 4次,但你不能这样做。