要求不使用字符串处理函数,计算字符串的长度,即统计字符数组中第一个'\0'前面的字符个数。并输出该字符数
C:\Program Files (x86)\Microsoft SDK\src\crt\strlen.c
/***
*strlen.c - contains strlen() routine
*
* Copyright (c) 1985-2001, Microsoft Corporation. All rights reserved.
*
*Purpose:
* strlen returns the length of a null-terminated string,
* not including the null byte itself.
*
*******************************************************************************/
#include <cruntime.h>
#include <string.h>
#ifdef _MSC_VER
#pragma function(strlen)
#endif /* _MSC_VER */
/***
*strlen - return the length of a null-terminated string
*
*Purpose:
* Finds the length in bytes of the given string, not including
* the final null character.
*
*Entry:
* const char * str - string whose length is to be computed
*
*Exit:
* length of the string "str", exclusive of the final null byte
*
*Exceptions:
*
*******************************************************************************/
size_t __cdecl strlen (
const char * str
)
{
const char *eos = str;
while( *eos++ ) ;
return( (int)(eos - str - 1) );
}
不知道你这个问题是否已经解决, 如果还没有解决的话:指令 | 描述 |
---|---|
#include | 它是C语言中的头文件命令,用于指定头文件嵌入源文件中。 |
#define | 宏定义。 |
#undef | 宏定义的终止符,用于取消已定义的宏。 |
#ifdef | 如果宏已定义则返回真。 |
#ifndf | 如果宏没有定义则返回真。 |
#if | 如果条件语句成立,则编译运行下面的代码。 |
#else | 与#if一起使用,如果#if条件不成立,则执行下面的代码。 |
#elif | 与#if一起使用,如果#if条件不成立,当前条件成立,则执行下面的代码。 |
#endif | 结束一个 #if……#else 条件编译块。 |
#error | 当遇到标准错误时,输出错误消息。 |
#pragma | 使用标准化方法,向编译器发布特殊的命令到编译器中。 |
针对该问题,可以借鉴可变参数列表的函数的实现方式,利用参数列表最左侧的参数来确定字符数组的长度,然后通过一个for循环依次遍历数组并计数,最终得到字符数组的长度。具体实现步骤如下:
#include <stdio.h>
#include <stdarg.h>
int getLength(char* str, ...)
{
int length = 0; // 初始化长度为0
va_list arg; // 定义可变参数列表变量
va_start(arg, str); // 初始化可变参数列表
int n = va_arg(arg, int); // 取出参数列表中的第一个参数 - 字符数组的长度
for (int i = 0; i < n; ++i) {
if (str[i] == '\0') {
break; // 字符数组已经遍历完,跳出循环
}
length++; // 统计字符数组的长度
}
va_end(arg); // 结束可变参数列表的使用
return length;
}
int main()
{
char str[] = "hello, world!"; // 字符数组
int len = getLength(str, sizeof(str)); // 调用函数获取字符数组的长度
printf("Length of string is: %d\n", len); // 输出字符数组的长度
return 0;
}
该程序的输出结果为:Length of string is: 13,表示字符数组的长度为13个字符。其中,getLength()函数中的va_list、va_start和va_arg等函数和可变参数列表的函数实现方式类似。主函数中调用getLength()函数时,第一个参数为字符数组的首地址,第二个参数为字符数组的长度,从而通过循环遍历字符数组并计数,最终返回字符数组的长度。