在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 *array1 或 array1[]。
看看下面的实现:
int lengthchar(char array1[])
{
int a,x=0;
for(a=0;*(array1++)!='[=10=]';a++)
{
x++;
}
return x;
}
PS: 可以使用 while 循环删除变量 a
。
在声明或定义一个函数时,应将类型为 T
的数组作为参数,使用符号:T *array
或 T array[]
; T
可以代表任何有效的 C 数据类型,例如 char
、int
、float
、double
等...
至于你的循环,变量 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;
}
我的大学有一项任务是使用 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 *array1 或 array1[]。
看看下面的实现:
int lengthchar(char array1[])
{
int a,x=0;
for(a=0;*(array1++)!='[=10=]';a++)
{
x++;
}
return x;
}
PS: 可以使用 while 循环删除变量 a
。
在声明或定义一个函数时,应将类型为 T
的数组作为参数,使用符号:T *array
或 T array[]
; T
可以代表任何有效的 C 数据类型,例如 char
、int
、float
、double
等...
至于你的循环,变量 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;
}