[英]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 *array1或array1[] 。
看看下面的實現:
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 *array
或T array[]
; T
可以代表任何有效的 C 數據類型,例如char
、 int
、 float
、 double
等...
至於你的循環,變量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.