gpt4 book ai didi

c - 使用指针扫描指针数组

转载 作者:行者123 更新时间:2023-11-30 20:35:49 25 4
gpt4 key购买 nike

这是一个示例,说明如何检查 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

等等..

最佳答案

第一:

checkDim() 就其本身而言,在循环经过 “Saturday” 指针时,会通过越界访问指针数组 days 来调用未定义的行为>.

代码似乎运行起来只是运气不好。

要解决此问题,请在 days 结束时显式引入 NULL 值以充当哨兵:

  char * days[] = {      //array of pointers
"Sunday", //days[0] = {'S','u','n','d','a','y','\0'}
...
"Saturday", //days[6] = {....}
NULL
};
<小时/>

回答您的问题:

要在迭代期间打印每个“字符串”的长度,您可以执行以下代码:

  while (*ptr)
{
printf("'%s' has length %zu.\n", *ptr, strlen(*ptr));
++ptr;
}

请注意,strlen() 返回 size_t(不是 int)以使用转换说明符 du 这里是错误的。如果正在使用的编译器 (VC) 未定义 zu,则您需要使用 lu

<小时/>

还有两件事:

  1. 原型(prototype)的放置

    原型(prototype)应该在全局范围内。

    所以改变这个:

    int main(void)
    {
    // prototype
    int checkDim( char **array);

    成为:

    // prototype
    int checkDim( char ** array);

    int main(void)
    {
  2. 限定参数保持常量为 const

    checkDim 不会更改days,因此通过告诉编译器这一点来帮助编译器创建最佳代码。

    更改此:

    int checkDim(char **array) 

    成为:

    int checkDim(const char ** array) 

关于c - 使用指针扫描指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37631183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com