在c中的函数中使用指针查找字符串长度的问题

Problem with finding the length of a string using pointers in a function in c

我的大学有一项任务是使用 function.Here 中的指针查找字符串的长度是我的代码:

#include <stdio.h>
#include <stdlib.h>

#define max 100

int lengthchar(char *array1[])
{
    int a, x = 0;
    for (a = 0; *(array1++) != '[=10=]'; a++)
    {
        x++;
    }
    return x;
}

int main()
{
    char arr1[max];
    int length;

    printf("Enter string\n");
    gets(arr1);

    length = lengthchar(arr1);

    printf("Length=%d", length);

    return 0;
}

但是当我输入以下内容时:

输入字符串:av

长度=9

它显示了错误的长度,我的错误是什么?

这是因为将字符串指针作为参数传递给函数的方式。

只需将 char *array1[] 更改为 char *array1array1[]

看看下面的实现:

int lengthchar(char array1[])
{
    int a,x=0;
    for(a=0;*(array1++)!='[=10=]';a++)
    {
        x++;
    }

   return x;
}

PS: 可以使用 while 循环删除变量 a

在声明或定义一个函数时,应将类型为 T 的数组作为参数,使用符号:T *arrayT array[]T 可以代表任何有效的 C 数据类型,例如 charintfloatdouble 等...

至于你的循环,变量 a 似乎是多余的,因为它对程序的任何部分都没有影响。函数lengthchar()的return值比输入的字符数多1

你也应该避免使用 gets() 函数,因为它被认为是危险的并且已经从 C 标准中删除了;请改用 fgets()

您的代码应如下所示:

#include <stdio.h>
#include <string.h>

#define max 100

int lengthchar(char *str)
{
    int len = 0;
    while (*str++)
    {
        len++;
    }
    return len;
}

int main()
{
    char str1[max];

    printf("Enter string:");

    fgets(str1, max, stdin);

    str1[strcspn(str1, "\n")] = 0; // remove new-line character

    int length = lengthchar(str1);

    printf("Length = %d\n", length);
    return 0;
}

在您的函数签名中,您告诉编译器 lenghtchar() 需要一个指向字符串的指针,或者换句话说 **char

您真正想要做的是将函数从 int lengthchar(char *array1[]) 更改为 int lengthchar(char array1[])int lengthchar(char *array1)。这有点棘手,因为在 C 中,您可以使用其第一个元素的地址(也就是使用指向其第一个项目的指针)来寻址数组。

Expert C Programming 有一章专门讨论这个主题。

现在,对于您的 lengthchar() 函数,我将进行一些重构以消除变量 a 并改用 while 循环。我还包含了另一个依赖于指针算法的替代实现(对我来说更有趣:))

另请注意,我使用 fgets() 而不是 gets(),后者被认为已弃用,因为它不进行任何边界检查。

#include <stdio.h>
#include <stdlib.h>

#define max 100

/* 
 * returns the lenght of the string excluding the terminating 
 * NULL character
 */
int lengthchar(char *array1) {
    int x = 0;
    while (*array1++)
        x++;
    return x-1;
}

int lengthchar1(char *array1){
  char *p;
  for (p = array1; *p; p++)
  ;
  return p - array1 - 1; /* -1 for [=10=] */
}

int main() {
    char arr1[max];
    int length;

    printf("Enter string\n");
    fgets(arr1, max, stdin);

    length = lengthchar(arr1);

    printf("Length=%d", length);

    return 0;
}