我正在尝试将字符指针数组作为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 ++包装器的方式。
答案 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次,但你不能这样做。