簡體   English   中英

使用c函數中的指針查找字符串長度的問題

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

我從大學得到了一項任務,即使用函數中的指針查找字符串的長度。這是我的代碼:

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

#define max 100

int lengthchar(char *array1[])
{
    int a, x = 0;
    for (a = 0; *(array1++) != '\0'; 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++)!='\0';a++)
    {
        x++;
    }

   return x;
}

PS:可以使用while循環刪除變量a

在您的函數簽名中,您告訴編譯器lenghtchar()需要一個指向字符串的指針,或者**char換句話說。

您真正想要做的是將您的函數從int lengthchar(char *array1[])更改為int lengthchar(char array1[])int lengthchar(char *array1) 這有點棘手,因為在 C 中,您可以使用數組的第一個元素的地址(也就是使用指向其第一項的指針)來尋址數組。

Expert C Programming有專門的章節討論這個主題。

現在, lengthchar()您的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 \0 */
}

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

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

    length = lengthchar(arr1);

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

    return 0;
}

在聲明或定義將T類型的數組作為參數的函數時,使用符號: T *arrayT array[] T可以代表任何有效的 C 數據類型,例如charintfloatdouble等...

至於你的循環,變量a似乎是多余的,因為它對程序的任何部分都沒有影響。 函數lengthchar()的返回值比輸入的字符數多1。

此外,您應該避免使用gets()函數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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM