这是一个示例,用于检查char
指针数组的维度:
#include <stdio.h>
int main(void){
// prototype
int checkDim( char **array);
char *days[] = { //array of pointers
"Sunday", //days[0] = {'S','u','n','d','a','y','\0'}
"Monday", //days[1] = {....}
"Tuesday", //days[2] = {....}
"Wednesday", //days[3] = {....}
"Thursday", //days[4] = {....}
"Friday", //days[5] = {....}
"Saturday" //days[6] = {....}
};
int dim;
dim = checkDim( days );
printf("Number of days = %i \n", dim );
return 0;
}
int checkDim( char **array ){
char **ptr = array;
while(*ptr){
++ptr;
}
return ptr - array;
}
分别为:
days[0]
是指向char(另一个数组)的指针,
days[1]
是指向char(另一个数组)的指针
...
days[i]
是指向char(另一个数组)的指针
使用while
我可以扫描包含指针的数组:
char **ptr = array; //
while(*ptr){
++ptr;
}
days[0]
并扫描每个字母以检查days[0]
的长度(随后days[1]
,days[2]
等...)? 我想要printf
这样的(例如):
> Number of days 7.
> Sunday is long 6 letters
> Monday is long 6 letters
> Tuesday is long 7 letters
等。
答案 0 :(得分:0)
首先:
checkDim()
因为它在循环经过指针days
时通过访问指针数组"Saturday"
来调用未定义的行为。
代码似乎运行不好运。
要解决此问题,请在NULL
末尾明确引入days
值作为哨兵:
char * days[] = { //array of pointers
"Sunday", //days[0] = {'S','u','n','d','a','y','\0'}
...
"Saturday", //days[6] = {....}
NULL
};
回答你的问题:
打印每个&#34;字符串的长度&#34;在迭代过程中,您可以执行以下操作:
while (*ptr)
{
printf("'%s' has length %zu.\n", *ptr, strlen(*ptr));
++ptr;
}
请注意,strlen()
返回size_t
(不是int
)以使用转化说明符d
或u
这里错误。如果正在使用的编译器(VC)未定义zu
,则需要使用lu
。
还有两件事:
原型的放置
原型应该在全球范围内。
所以改变这个:
int main(void)
{
// prototype
int checkDim( char **array);
是:
// prototype
int checkDim( char ** array);
int main(void)
{
限定参数保持不变为const
checkDim
不会更改days
,因此请通过告诉它来帮助编译器创建最佳代码。
改变这个:
int checkDim(char **array)
是:
int checkDim(const char ** array)